Ik heb een Git repository gekloond, die ongeveer vijf branches bevat. Maar, als ik git branch
doe, zie ik er maar één van:
$ git branch
* master
Ik weet dat ik git branch -a
kan doen om alle branches te zien, maar hoe zou ik alle branches lokaal kunnen ophalen, zodat als ik git branch
doe, het het volgende laat zien?
$ git branch
* master
* staging
* etc...
Je kunt alle takken van alle remotes zo ophalen:
git fetch --all
Het is eigenlijk een power move.
fetch
werkt lokale kopieën van remote branches bij, dus dit is altijd veilig voor je lokale branches MAAR:
fetch
zal de lokale takken (die de takken op afstand volgen) niet updaten; als je je lokale takken wilt updaten, moet je nog steeds elke tak ophalen.
fetch
zal geen lokale takken aanmaken (die optrekken van takken op afstand), je moet dit handmatig doen. Als je alle remote branches wilt zien:
git branch -a
Om lokale takken bij te werken die remote takken volgen:
git pull --all
Dit kan echter nog steeds onvoldoende zijn. Het zal alleen werken voor je lokale branches die remote branches volgen. Om alle remote branches te volgen, voer je deze oneliner uit VOORAFGAANDE git pull --all
:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(Het lijkt erop dat pull alle branches van alle remotes ophaalt, maar ik haal altijd eerst op voor de zekerheid).
Voer het eerste commando alleen uit als er remote branches op de server zijn die'niet door je lokale branches worden gevolgd.
P.S. AFAIK git fetch --all
en git remote update
zijn gelijkwaardig.
Kamil Szot's commentaar, die mensen nuttig hebben gevonden.
Ik moest gebruiken:
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneomdat je code lokale branches maakte met de naam
origin/branchname
en Ik kreeg "refname 'origin/branchname' is dubbelzinnig wanneer ik ernaar verwees.
$ git remote update
$ git pull --all
Dit veronderstelt dat alle takken bijgehouden worden.
Als ze dat niet zijn, kun je dit in Bash afvuren:
for remote in `git branch -r `; do git branch --track $remote; done
Voer dan het commando uit.