Оформить заказ или перечислить удаленные ветки в GitPython - PullRequest
10 голосов
/ 18 марта 2010

Я не вижу возможности оформить заказ или перечислить удаленные / локальные филиалы в этом модуле: https://gitpython.readthedocs.io/en/stable/

Ответы [ 4 ]

7 голосов
/ 14 февраля 2017

Для отображения филиалов в настоящее время вы можете использовать:

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

r.heads возвращает git.util.IterableList (наследует после list) git.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, который переместился из gitorious в Github

7 голосов
/ 18 марта 2010

После того, как вы сделали

from git import Git
g = Git()

(и, возможно, какая-то другая команда для инициализации g в нужном вам хранилище) все запросы атрибутов на g более или менее преобразуются в вызов git attr *args.

Таким образом:

g.checkout("mybranch")

должен делать то, что вы хотите.

g.branch()

перечислит ветви. Однако обратите внимание, что это команды очень низкого уровня, и они будут возвращать точный код, который вернут исполняемые файлы git. Поэтому не ожидайте хорошего списка. Я буду просто строкой из нескольких строк, и в одной строке в качестве первого символа будет звездочка.

Возможно, есть лучший способ сделать это в библиотеке. Например, в repo.py есть специальная команда active_branch. Вам нужно немного пройтись по источнику и посмотреть на себя.

1 голос
/ 01 марта 2017

У меня была похожая проблема. В моем случае я хотел только перечислить удаленные ветви, которые отслеживаются локально. Это сработало для меня:

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
0 голосов
/ 19 ноября 2017

Просто чтобы сделать это очевидным - получить список удаленных веток из текущего каталога репо:

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)
...