2017-12-18 126 views
5

Sklonowałem repozytorium z GitPythonem, teraz chciałbym sprawdzić gałąź i zaktualizować drzewo robocze lokalnego repozytorium z zawartością tego oddziału. Idealnie byłoby również sprawdzić, czy oddział istnieje przed wykonaniem tego. Oto, co mam do tej pory:Jak sprawdzić oddział za pomocą GitPython

import git 

repo_clone_url = "[email protected]:mygithubuser/myrepo.git" 
local_repo = "mytestproject" 
test_branch = "test-branch" 
repo = git.Repo.clone_from(repo_clone_url, local_repo) 
# Check out branch test_branch somehow 
# write to file in working directory 
repo.index.add(["test.txt"]) 
commit = repo.index.commit("Commit test") 

Nie jestem pewien, co umieścić w powyższym komentarzu. documentation wydaje się dawać przykład, jak odłączyć HEAD, ale nie, jak sprawdzić nazwę oddziału.

Odpowiedz

4

Jeżeli oddział istnieje:

repo.git.checkout('branchename') 

Jeśli nie:

repo.git.checkout('-b', 'branchename') 

Zasadniczo z GitPython, jeśli wiesz, jak to zrobić w linii poleceń, ale nie w ramach API, wystarczy użyć repo.git.action("your command without leading 'git' and 'action'"), przykład: git log --reverse =>repo.git.log('--reverse')

+0

Dzięki, czy wiesz, jak sprawdzić, czy istnieje oddział lokalny? –

+0

Tak. Wiem nawet o dwóch z nich! I z pewnością mogę sobie wyobrazić jeszcze więcej za kilka minut! Ale wszystkie one nie są tak dobre, ponieważ wszystkie opierają się na tym samym. GitPython tylko oblicza i przekazuje wiersze polecenia git do systemu operacyjnego i wyniki analizy. Najlepsze, co możesz, to "spróbować" czegoś i oczekiwać 'git.exc.GitCommandError'. Jeśli tak się stanie, gałąź nie istnieje LUB pomieszałeś kod. Co sprawdzić: 'repo.git.checkout ('branchename')' lub 'repo.git.rev_parse ('- verify', 'branchname')' . Nie robi tego samego, ale daje dokładnie taki sam wynik. – Arount