Клонирах хранилище на Git, което съдържа около пет клона. Когато обаче направя git branch
, виждам само един от тях:
$ git branch
* master
Знам, че мога да направя git branch -a
, за да видя всички клонове, но как да изтегля всички клонове локално, така че когато направя git branch
, да се покаже следното?
$ git branch
* master
* staging
* etc...
Можете да извлечете всички клонове от всички отдалечени устройства по следния начин:
git fetch --all
Това по принцип е power move.
fetch
актуализира локалните копия на отдалечените клонове, така че това винаги е безопасно за вашите локални клонове ВЪПРЕКИ:
fetch
няма да актуализира локалните клонове (които следят отдалечените клонове); ако искате да актуализирате локалните си клонове, все пак трябва да изтеглите всеки клон.
fetch
няма да създаде локални клонове (които проследяват отдалечени клонове); трябва да направите това ръчно. Ако искате да видите всички отдалечени клонове:
git branch -a
За да усъвършенствате локалните клонове, които следят отдалечените клонове:
git pull --all
Това обаче може да се окаже недостатъчно. То ще работи само за вашите локални клонове, които следят отдалечени клонове. За да проследите всички отдалечени клонове, изпълнете този онлайнер ПРЕДИ 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
(Изглежда, че pull извлича всички клонове от всички отдалечени места, но аз винаги извличам първо, за да съм сигурен.)
Изпълнете първата команда само ако на сървъра има отдалечени клонове, които не се проследяват от локалните клонове.
P.S. По аналогия git fetch --all
и git remote update
са еквивалентни.
Kamil Szot's comment, който хората са намерили за полезен.
Трябваше да използвам:
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneзащото вашият код създаде локални клонове с имена
оригинал/бранш
и получавах "refname 'origin/branchname' е двусмислено, когато се обръщах към него.
Изготвяне на списък с отдалечени клонове:
git branch -r
Можете да ги проверите като локални клонове с:
git checkout -b LocalName origin/remotebranchname
$ git remote update
$ git pull --all
Това предполага, че всички клонове са проследени.
Ако това не е така, можете да използвате Bash:
for remote in `git branch -r `; do git branch --track $remote; done
След това изпълнете командата.