GitPython中的`git ls-remote`

4
在我的Python程序中,我想检查远程是否存在一个ref。 我可以使用git ls-remote检查远程,但我想避免自己解析输出。
我在GitPython中找到了git.remote.Remote,但这只涉及本地存储库的远程。 GitPython是否有相应的命令,允许我查看远程引用而不克隆存储库?
3个回答

22

GitPython 不支持 ls-remote 命令,但是你可以使用 git.cmd 来运行任何 git 命令并手动解析输出:

import git
def lsremote(url):
    remote_refs = {}
    g = git.cmd.Git()
    for ref in g.ls_remote(url).split('\n'):
        hash_ref_list = ref.split('\t')
        remote_refs[hash_ref_list[1]] = hash_ref_list[0]
    return remote_refs

例子:

In [3]: refs = lsremote('https://github.com/gitpython-developers/GitPython.git')
In [4]: refs['HEAD']
Out[4]: u'9f4af7c6db25c5bbec7fdc8dfc0ea6803350d94c'

2

不克隆情况下的案例:

import git

url = "git://github.com/git/git.git"
g = git.cmd.Git()
g.ls_remote("--tags", url).split('\n')

我为您留下了输出的解析,但我有一些示例。
>>> test = g.ls_remote("--tags", url).split('\n')
>>> print(test[0])
d5aef6e4d58cfe1549adef5b436f3ace984e8c86    refs/tags/gitgui-0.10.0

1
这也可以正常工作。
from git import Repo
repo = Repo('path to source')
repo.git.ls_remote("--heads", "origin", "release/10.0.0.2")

输出将类似于:

输出结果如下:

'9e5ca005c2d320a4904e88e25df1efa6fb26b396\trefs/heads/release/10.0.0.2'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接