如何使用 Gitpython 从 Git 的特定分支克隆
How to clone from specific branch from Git using Gitpython
我尝试在 python 函数中使用 GitPython 从 git 克隆存储库。
我在我的 python 函数中使用 GitPython 库从 git 克隆,我的代码片段如下:
from git import Repo
Repo.clone_from('http://user:password@github.com/user/project.git',
/home/antro/Project/')
它从 master 分支克隆。如何使用 GitPython 从其他分支克隆或任何其他库可用于从各个分支克隆?请告诉我。
我通过在命令行中使用
提及分支来了解克隆
git克隆-b分支http://github.com/user/project.git
只需传递分支名称参数,例如:-
repo = Repo.clone_from(
'http://user:password@github.com/user/project.git',
'/home/antro/Project/',
branch='master'
)
来自toanant的回答。
这适用于我的 --single-branch
选项
repo = Repo.clone_from(
'http://user:password@github.com/user/project.git --single-branch',
'/home/antro/Project/',
branch='master'
)
对于--single-branch选项,你可以只传递一个single_branch
参数给Repo.clone_from()
方法:
Repo.clone_from(repo, path, single_branch=True, b='branch')
GitPython 在后台使用关键字参数转换:
# cmd.py
def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool) -> List[str]:
if len(name) == 1:
if value is True:
return ["-%s" % name]
elif value not in (False, None):
if split_single_char_options:
return ["-%s" % name, "%s" % value]
else:
return ["-%s%s" % (name, value)]
else:
if value is True:
return ["--%s" % dashify(name)]
elif value is not False and value is not None:
return ["--%s=%s" % (dashify(name), value)]
return []
命令部分的结果列表被送入 subprocess.Popen
,因此您 不 想要将 --single-branch
添加到存储库 URL .如果这样做,一个奇怪的列表将被传递给 Popen。例如:
['-v', '--branch=my-branch', 'https://github.com/me/my-project.git --single-branch', '/tmp/clone/here']
然而,有了这些新信息,您可以通过 任何 git
CLI flags 传递您喜欢的,只需使用 kwargs
。然后您可能会问自己,“我如何将破折号传递给像 single-branch
这样的关键字?”在 Python 中这是不行的。您将在上面的代码中看到一个 dashify
函数,它将任何标志从 single_branch=True
转换为 single-branch
,然后转换为 --single-branch
.
完整示例:
这是一个有用的示例,用于使用来自 GitHub 的个人访问令牌克隆单个浅分支:
repo_url = "https://github.com/me/private-project.git"
branch = "wip-branch"
# Notice the trailing : below
credentials = base64.b64encode(f"{GHE_TOKEN}:".encode("latin-1")).decode("latin-1")
Repo.clone_from(
url=repo_url,
c=f"http.{repo_url}/.extraheader=AUTHORIZATION: basic {credentials}",
single_branch=True,
depth=1,
to_path=f"/clone/to/here",
branch=branch,
)
发送到 Popen
的命令列表如下所示:
['git', 'clone', '-v', '-c', 'http.https://github.com/me/private-project.git/.extraheader=AUTHORIZATION: basic XTE...UwNTo=', '--single-branch', '--depth=1', '--bare', '--branch=wip-branch', 'https://github.com/me/private-project.git', '/clone/to/here']
(PSA:请不要在 @
之前将您的个人令牌作为 URL 的一部分实际发送。)
我尝试在 python 函数中使用 GitPython 从 git 克隆存储库。 我在我的 python 函数中使用 GitPython 库从 git 克隆,我的代码片段如下:
from git import Repo
Repo.clone_from('http://user:password@github.com/user/project.git', /home/antro/Project/')
它从 master 分支克隆。如何使用 GitPython 从其他分支克隆或任何其他库可用于从各个分支克隆?请告诉我。
我通过在命令行中使用
提及分支来了解克隆git克隆-b分支http://github.com/user/project.git
只需传递分支名称参数,例如:-
repo = Repo.clone_from(
'http://user:password@github.com/user/project.git',
'/home/antro/Project/',
branch='master'
)
来自toanant的回答。
这适用于我的 --single-branch
选项
repo = Repo.clone_from(
'http://user:password@github.com/user/project.git --single-branch',
'/home/antro/Project/',
branch='master'
)
对于--single-branch选项,你可以只传递一个single_branch
参数给Repo.clone_from()
方法:
Repo.clone_from(repo, path, single_branch=True, b='branch')
GitPython 在后台使用关键字参数转换:
# cmd.py
def transform_kwarg(self, name: str, value: Any, split_single_char_options: bool) -> List[str]:
if len(name) == 1:
if value is True:
return ["-%s" % name]
elif value not in (False, None):
if split_single_char_options:
return ["-%s" % name, "%s" % value]
else:
return ["-%s%s" % (name, value)]
else:
if value is True:
return ["--%s" % dashify(name)]
elif value is not False and value is not None:
return ["--%s=%s" % (dashify(name), value)]
return []
命令部分的结果列表被送入 subprocess.Popen
,因此您 不 想要将 --single-branch
添加到存储库 URL .如果这样做,一个奇怪的列表将被传递给 Popen。例如:
['-v', '--branch=my-branch', 'https://github.com/me/my-project.git --single-branch', '/tmp/clone/here']
然而,有了这些新信息,您可以通过 任何 git
CLI flags 传递您喜欢的,只需使用 kwargs
。然后您可能会问自己,“我如何将破折号传递给像 single-branch
这样的关键字?”在 Python 中这是不行的。您将在上面的代码中看到一个 dashify
函数,它将任何标志从 single_branch=True
转换为 single-branch
,然后转换为 --single-branch
.
完整示例:
这是一个有用的示例,用于使用来自 GitHub 的个人访问令牌克隆单个浅分支:
repo_url = "https://github.com/me/private-project.git"
branch = "wip-branch"
# Notice the trailing : below
credentials = base64.b64encode(f"{GHE_TOKEN}:".encode("latin-1")).decode("latin-1")
Repo.clone_from(
url=repo_url,
c=f"http.{repo_url}/.extraheader=AUTHORIZATION: basic {credentials}",
single_branch=True,
depth=1,
to_path=f"/clone/to/here",
branch=branch,
)
发送到 Popen
的命令列表如下所示:
['git', 'clone', '-v', '-c', 'http.https://github.com/me/private-project.git/.extraheader=AUTHORIZATION: basic XTE...UwNTo=', '--single-branch', '--depth=1', '--bare', '--branch=wip-branch', 'https://github.com/me/private-project.git', '/clone/to/here']
(PSA:请不要在 @
之前将您的个人令牌作为 URL 的一部分实际发送。)