Ich sehe in diesem Modul keine Option zum Auschecken oder Auflisten entfernter/lokaler Zweige: https://gitpython.readthedocs.io/en/stable/
Antworten
Zu viele Anzeigen?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 .
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.
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
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)
- See previous answers
- Weitere Antworten anzeigen