`git ls-remote` в GitPython

В моей программе на Python я хочу проверить, есть ли ссылка на моем пульте. Я могу проверить пульт с git ls-remote, но я бы не хотел разбирать вывод сам.

я нашел git.remote.Remote в GitPython, но это относится только к удаленному локальному хранилищу.

Есть ли GitPython есть эквивалентная команда, которая позволяет мне просматривать удаленные ссылки без клонирования хранилища?

1 ответ

Решение

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'

Случай без клонирования:

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

Это тоже работает.

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'

Другие вопросы по тегам