2010-03-18 10 views

Antwort

7

Nachdem Sie getan haben

from git import Git 
g = Git() 

(und möglicherweise ein anderer Befehl zum Initialisieren von g an das Repository, das Ihnen wichtig ist) werden alle Attributanforderungen auf g mehr oder weniger in einen Aufruf von git attr *args umgewandelt.

Deshalb:

g.checkout("mybranch") 

sollte das tun, was Sie wollen.

g.branch() 

wird die Zweige auflisten. Beachten Sie jedoch, dass es sich um Befehle auf sehr niedriger Ebene handelt, die den genauen Code zurückgeben, den die ausführbaren Git-Dateien zurückgeben. Erwarten Sie daher keine nette Liste. Ich werde nur eine Reihe von mehreren Zeilen und mit einer Zeile mit einem Stern als das erste Zeichen sein.

Möglicherweise gibt es einen besseren Weg, dies in der Bibliothek zu tun. In repo.py zum Beispiel ist ein spezieller active_branch Befehl. Du musst ein wenig durch die Quelle gehen und selbst schauen.

+0

wenn ich laufe r = Git.clone ("git ...") r.checkout ("entwickeln") funktioniert nicht .. Attribute: 'str' Objekt hat kein Attribut 'Kasse' – Mike

+0

ok sieht aus, als müsste ich ag = Git ("dir ") dann kann ich es auschecken – Mike

+0

Könnte sein. Ich klonte nur mit 'g' und dann funktionierte es. – Debilski

4

Zweige Um eine zur Zeit können Sie:

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

r.heads kehrt git.util.IterableList (erbt nach list) von git.Head Objekte, so können Sie:

repo_heads_names = [h.name for h in repo_heads] 

Und zB zur Kasse. master:

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

Modul in der Frage erwähnt ist GitPython die moved von gitorious zu Github.

1

Ich hatte ein ähnliches Problem. In meinem Fall wollte ich nur die Remote-Zweige auflisten, die lokal verfolgt werden. Dieser arbeitete für mich:

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) 

Falls alle entfernten Niederlassungen benötigt werden, würde ich es vorziehen git läuft direkt:

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

Wenn Sie bereits eine Repo-Instanz haben, können Sie Git-Befehle direkt aufrufen als: '' 'repo.git.branch ('- a')' '' – dusktreader

0

einfach es offensichtlich zu machen - eine Liste der Remote-Filialen aus dem Strom zu erhalten Repo-Verzeichnis:

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) 
Verwandte Themen