23 Stimmen

Auschecken oder Auflisten entfernter Zweige in GitPython

Ich sehe in diesem Modul keine Option zum Auschecken oder Auflisten entfernter/lokaler Zweige: https://gitpython.readthedocs.io/en/stable/

22voto

Don Charlie Punkte 365

Für diejenigen, die nur die entfernten Zweige ausdrucken möchten:

# Execute from the repository root directory
repo = git.Repo('.')
remote_refs = repo.remote().refs

for refs in remote_refs:
    print(refs.name)

18voto

pkowalczyk Punkte 13653

Um Zweige aufzulisten, können Sie verwenden:

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

r.heads gibt zurück. git.util.IterableList (erbt nach list ) von git.Head Objekte, damit Sie das können:

repo_heads_names = [h.name for h in repo_heads]

Und zum Auschecken z.B.. master :

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

Das in der Frage genannte Modul ist GitPython die umgezogen von gitorious a Github .

9voto

Debilski Punkte 65106

Nachdem Sie das getan haben

from git import Git
g = Git()

(und möglicherweise einen anderen Befehl für init g zu dem Repository, das Sie interessiert) alle Attributanfragen auf g werden mehr oder weniger in einen Aufruf von git attr *args .

Deshalb:

g.checkout("mybranch")

sollte das tun, was Sie wollen.

g.branch()

werden die Zweige aufgelistet. Beachten Sie jedoch, dass es sich hierbei um sehr einfache Befehle handelt, die genau den Code zurückgeben, den auch die ausführbaren Dateien von Git zurückgeben. Erwarten Sie daher keine schöne Liste. Es wird nur eine mehrzeilige Zeichenkette sein, wobei eine Zeile ein Sternchen als erstes Zeichen enthält.

Vielleicht gibt es eine bessere Möglichkeit, dies in der Bibliothek zu tun. Unter repo.py ist zum Beispiel eine besondere active_branch Befehl. Sie müssen die Quelle ein wenig durchgehen und selbst nachschauen.

5voto

Marios V Punkte 1114

Ich hatte ein ähnliches Problem. In meinem Fall wollte ich nur die entfernten Zweige auflisten, die lokal verfolgt werden. Das hat bei mir funktioniert:

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) 

Wenn alle entfernten Zweige benötigt werden, würde ich es vorziehen, git direkt auszuführen:

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

4voto

parsley72 Punkte 7498

Nur um es deutlich zu machen - um eine Liste der entfernten Zweige aus dem aktuellen Repo-Verzeichnis zu erhalten:

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X