@@ -1035,7 +1035,7 @@ def init(
1035
1035
object_format : t .Literal ["sha1" , "sha256" ] | None = None ,
1036
1036
branch : str | None = None ,
1037
1037
initial_branch : str | None = None ,
1038
- shared : bool | None = None ,
1038
+ shared : bool | str | None = None ,
1039
1039
quiet : bool | None = None ,
1040
1040
bare : bool | None = None ,
1041
1041
# libvcs special behavior
@@ -1046,60 +1046,100 @@ def init(
1046
1046
1047
1047
Parameters
1048
1048
----------
1049
- quiet : bool
1050
- ``--quiet``
1051
- bare : bool
1052
- ``--bare``
1053
- object_format :
1054
- Hash algorithm used for objects. SHA-256 is still experimental as of git
1055
- 2.36.0.
1049
+ template : str, optional
1050
+ Directory from which templates will be used. The template directory
1051
+ contains files and directories that will be copied to the $GIT_DIR
1052
+ after it is created.
1053
+ separate_git_dir : :attr:`libvcs._internal.types.StrOrBytesPath`, optional
1054
+ Instead of placing the git repository in <directory>/.git/, place it in
1055
+ the specified path.
1056
+ object_format : "sha1" | "sha256", optional
1057
+ Specify the hash algorithm to use. The default is sha1. Note that
1058
+ sha256 is still experimental in git.
1059
+ branch : str, optional
1060
+ Use the specified name for the initial branch. If not specified, fall
1061
+ back to the default name (currently "master").
1062
+ initial_branch : str, optional
1063
+ Alias for branch parameter. Specify the name for the initial branch.
1064
+ shared : bool | str, optional
1065
+ Specify that the git repository is to be shared amongst several users.
1066
+ Can be 'false', 'true', 'umask', 'group', 'all', 'world',
1067
+ 'everybody', or an octal number.
1068
+ quiet : bool, optional
1069
+ Only print error and warning messages; all other output will be
1070
+ suppressed.
1071
+ bare : bool, optional
1072
+ Create a bare repository. If GIT_DIR environment is not set, it is set
1073
+ to the current working directory.
1056
1074
1057
1075
Examples
1058
1076
--------
1059
- >>> new_repo = tmp_path / 'example'
1060
- >>> new_repo.mkdir()
1061
- >>> git = Git(path=new_repo)
1077
+ >>> git = Git(path=tmp_path)
1062
1078
>>> git.init()
1063
1079
'Initialized empty Git repository in ...'
1064
- >>> pathlib.Path(new_repo / 'test').write_text('foo', 'utf-8')
1065
- 3
1066
- >>> git.run(['add', '.'])
1067
- ''
1068
1080
1069
- Bare :
1081
+ Create with a specific initial branch name :
1070
1082
1071
- >>> new_repo = tmp_path / 'example1 '
1083
+ >>> new_repo = tmp_path / 'branch_example '
1072
1084
>>> new_repo.mkdir()
1073
1085
>>> git = Git(path=new_repo)
1086
+ >>> git.init(branch='main')
1087
+ 'Initialized empty Git repository in ...'
1088
+
1089
+ Create a bare repository:
1090
+
1091
+ >>> bare_repo = tmp_path / 'bare_example'
1092
+ >>> bare_repo.mkdir()
1093
+ >>> git = Git(path=bare_repo)
1074
1094
>>> git.init(bare=True)
1075
1095
'Initialized empty Git repository in ...'
1076
- >>> pathlib.Path(new_repo / 'HEAD').exists()
1077
- True
1078
1096
1079
- Existing repo :
1097
+ Create with a separate git directory :
1080
1098
1081
- >>> git = Git(path=new_repo)
1082
- >>> git = Git(path=example_git_repo.path)
1083
- >>> git_remote_repo = create_git_remote_repo()
1084
- >>> git.init()
1085
- 'Reinitialized existing Git repository in ...'
1099
+ >>> repo_path = tmp_path / 'repo'
1100
+ >>> git_dir = tmp_path / 'git_dir'
1101
+ >>> repo_path.mkdir()
1102
+ >>> git_dir.mkdir()
1103
+ >>> git = Git(path=repo_path)
1104
+ >>> git.init(separate_git_dir=str(git_dir.absolute()))
1105
+ 'Initialized empty Git repository in ...'
1106
+
1107
+ Create with shared permissions:
1086
1108
1109
+ >>> shared_repo = tmp_path / 'shared_example'
1110
+ >>> shared_repo.mkdir()
1111
+ >>> git = Git(path=shared_repo)
1112
+ >>> git.init(shared='group')
1113
+ 'Initialized empty shared Git repository in ...'
1114
+
1115
+ Create with a template directory:
1116
+
1117
+ >>> template_repo = tmp_path / 'template_example'
1118
+ >>> template_repo.mkdir()
1119
+ >>> git = Git(path=template_repo)
1120
+ >>> git.init(template=str(tmp_path))
1121
+ 'Initialized empty Git repository in ...'
1087
1122
"""
1088
- required_flags : list [str ] = [str (self .path )]
1089
1123
local_flags : list [str ] = []
1124
+ required_flags : list [str ] = [str (self .path )]
1090
1125
1091
1126
if template is not None :
1092
1127
local_flags .append (f"--template={ template } " )
1093
1128
if separate_git_dir is not None :
1094
- local_flags .append (f"--separate-git-dir={ separate_git_dir !r} " )
1129
+ if isinstance (separate_git_dir , pathlib .Path ):
1130
+ separate_git_dir = str (separate_git_dir .absolute ())
1131
+ local_flags .append (f"--separate-git-dir={ separate_git_dir !s} " )
1095
1132
if object_format is not None :
1096
1133
local_flags .append (f"--object-format={ object_format } " )
1097
1134
if branch is not None :
1098
- local_flags .extend (["--branch" , branch ])
1099
- if initial_branch is not None :
1135
+ local_flags .extend (["--initial- branch" , branch ])
1136
+ elif initial_branch is not None :
1100
1137
local_flags .extend (["--initial-branch" , initial_branch ])
1101
- if shared is True :
1102
- local_flags .append ("--shared" )
1138
+ if shared is not None :
1139
+ if isinstance (shared , bool ):
1140
+ local_flags .append ("--shared" )
1141
+ else :
1142
+ local_flags .append (f"--shared={ shared } " )
1103
1143
if quiet is True :
1104
1144
local_flags .append ("--quiet" )
1105
1145
if bare is True :
0 commit comments