2012-06-12 29 views
8

Próbuję użyć GitPython do napisania skryptów w języku Python, których mogę użyć do uproszczenia codziennych zadań, ponieważ zarządzam wieloma gałęziami.Używanie modułu GitPython do uzyskania zdalnego oddziału HEAD

Jestem również całkiem nowy dla Pythona, jeśli chodzi o pisanie skomplikowanych skryptów.

Jest to API użyłem: GitPython API doc

Chcę napisać go w GitPython że po prostu wykonuje następujące operacje i przetwarza się część, która mnie HEAD zdalnego oddział wskazuje pokazuje. W innym słowem, chcę po prostu uzyskać remotes/origin/HEAD

$ git branch -a 
    master 
* branch_to_remove 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/testing 

przeglądać doc api wiele razy, najpierw mam problemy rozumienia formatu Python tych docs API, i nie mogłem znaleźć nic przydatne do użycia w tym innym niż remote_head w class git.refs.reference.Reference(repo, path, check_path=True) Nie można nawet wywołać/zainicjować go.

Oto, co miałem do tej pory, i można powiedzieć, co próbuję zrobić, aby po prostu przywrócić do stanu „nie oddział” i usunąć bieżące oddział jestem na:

import git 
from git import * 
repo = git.Repo("/some/path/testing") 
repo.git.branch() 
[some code to get the remotes/origin/HEAD, set it to remoteHeadBranch ] 
repo.git.checkout(remoteHeadBranch) # this should reset the Git back to 'no branch' state 
repo.git.checkout(D="branch_to_remove") 

Każda pomoc jest doceniana!

Dzięki.

Odpowiedz

3

Właśnie zobaczyłem twoje pytanie Zastanawiam się nad tym gitPython, wygląda na naprawdę ładne narzędzie, i szukałem tego konkretnego pytania w dokumentacji GitPython bez szczęścia, ale jeśli szukasz na githubie zobaczysz wiele testów tam i tam jest test na to.

Zobaczysz coś takiego podczas wyszukiwania dla "usunąć nowy oddział":

# remove new branch 
Head.delete(new_remote_branch.repo, new_remote_branch) 

GitPython Reference

+0

Dzięki za komentarz! Spróbuję tego! Czy ktoś może mi pomóc, czytając te dokumenty w języku Python API?Chodzi mi o to, że dokument jest bardzo inny i trudny do przeczytania dla takiego gościa z Java, takiego jak ja :-( Dzięki! – xbeta

+0

To * NIE * zadziała, ponieważ nie można usunąć gałęzi, w której aktualnie się znajdujesz, więc pierwszym krokiem jest zawsze powrócić do stanu "brak oddziału", który próbuję wykonać: 'Błąd podczas przełączania do stanu" nie "gałęzi 'gałąź git -d newMaster' zwróciła kod zakończenia 1: błąd: Nie można usunąć oddziału "newMaster", którym aktualnie jesteś. " – xbeta

3

Aby wydrukować bieżącą Branża:

print(repo.head.ref) 

do listy branże

print [str(b) for b in repo.heads] 

Do kasy oddziału

repo.heads[branch].checkout() 

lub repo.git.checkout(branch)

Jeśli próbujesz usunąć gałąź, trzeba być w innym lokalnym oddziale, co można zrobić na kilka sposobów

repo.heads['master'].checkout() 

lub repo.git.checkout('master') lub repo.git.checkout('remotes/origin/master')

Nadzieja to pomaga