18

我在此模块中看不到结帐或列出远程/本地分支的选项:https ://gitpython.readthedocs.io/en/stable/

4

6 回答 6

14

要列出您可以使用的分支:

from git import Repo
r = Repo(your_repo_path)
repo_heads = r.heads # or it's alias: r.branches

r.heads返回git.util.IterableList(在 之后继承listgit.Head对象,因此您可以:

repo_heads_names = [h.name for h in repo_heads]

并结帐,例如。master

repo_heads['master'].checkout() 
# you can get elements of IterableList through it_list['branch_name'] 
# or it_list.branch_name

问题中提到的模块是GitPython转移Github的。gitorious

于 2017-02-13T22:19:52.340 回答
14

对于那些只想打印远程分支的人:

# Execute from the repository root directory
repo = git.Repo('.')
remote_refs = repo.remote().refs

for refs in remote_refs:
    print(refs.name)
于 2020-03-09T18:32:34.870 回答
9

完成后

from git import Git
g = Git()

(可能还有其他一些命令来初始化g您关心的存储库)上的所有属性请求g或多或少都转换为对git attr *args.

所以:

g.checkout("mybranch")

应该做你想做的。

g.branch()

将列出分支。但是,请注意,这些是非常低级的命令,它们将返回 git 可执行文件将返回的确切代码。因此,不要指望一个好的列表。我将只是一个由几行组成的字符串,其中一行以星号作为第一个字符。

在图书馆里可能有更好的方法来做到这一点。例如repo.py是一个特殊的active_branch命令。您必须稍微浏览一下源代码并自己寻找。

于 2010-03-18T20:23:41.193 回答
4

我有一个类似的问题。就我而言,我只想列出在本地跟踪的远程分支。这对我有用:

import git

repo = git.Repo(repo_path)
branches = []
for r in repo.branches:
    branches.append(r)
    # check if a tracking branch exists
    tb = t.tracking_branch()
    if tb:
        branches.append(tb) 

如果需要所有远程分支,我宁愿直接运行 git:

def get_all_branches(path):
    cmd = ['git', '-C', path, 'branch', '-a']
    out = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
    return out
于 2017-03-01T11:04:19.417 回答
4

只是为了让它明显 - 从当前 repo 目录中获取远程分支的列表:

import os, git

# Create repo for current directory
repo = git.Repo(os.getcwd())

# Run "git branch -r" and collect results into array
remote_branches = []
for ref in repo.git.branch('-r').split('\n'):
    print ref
    remote_branches.append(ref)
于 2017-11-19T01:08:18.787 回答
1

基本上,使用 GitPython,如果您知道如何在命令行中而不是在 API 中执行此操作,只需使用 repo.git.action("your command withoutleading 'git' and 'action'"),例如:git log - -reverse => repo.git.log('--reverse')

在这种情况下https://stackoverflow.com/a/47872315/12550269

所以我试试这个命令:

repo = git.Repo()

repo.git.checkout('-b', local_branch, remote_branch)

此命令可以创建一个新的本地分支名称local_branch(如果已经有,rasie 错误)并设置为跟踪远程分支remote_branch

它工作得很好!

于 2020-05-28T02:29:27.287 回答