2010-03-18 3 views

ответ

7

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

from git import Git 
g = Git() 

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

Поэтому:

g.checkout("mybranch") 

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

g.branch() 

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

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

+0

когда я бегу г = Git.clone ("мерзавец ...") r.checkout ("разработка") не работает .. AttributeError: 'ул' объект не имеет атрибута 'проверку' – Mike

+0

ok выглядит как мне нужно запустить ag = Git ("dir "), то я могу проверить – Mike

+0

Может быть. Я просто клонировал с 'g', а затем это сработало. – Debilski

4

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

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 который moved от gitorious к Github.

1

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

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) 

В случае нужны все удаленные филиалы, я предпочел бы работаю мерзавец непосредственно:

def get_all_branches(path): 
    cmd = ['git', '-C', path, 'branch', '-a'] 
    out = subprocess.check_output(cmd, stderr=subprocess.STDOUT) 
    return out 
+1

Если у вас уже есть экземпляр Repo, вы можете вызвать команды git непосредственно как: '' 'repo.git.branch ('- a')' '' – dusktreader

0

Просто, чтобы сделать его очевиден - получить список удаленных филиалов с тока каталог репо:

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) 
Смежные вопросы