Vraag Hoe alle remote branches klonen in Git?


ik heb een master en een development tak, beide ingedrukt GitHub. ik heb cloned, pulled, en fetchmaar ik blijf niet in staat iets anders te krijgen dan het master tak terug.

Ik weet zeker dat ik iets voor de hand lig, maar ik heb de handleiding gelezen en ik krijg helemaal geen vreugde.


3555
2017-09-15 22:42


oorsprong


antwoorden:


Kloon eerst een afstandsbediening Git repository en CD erin:

$ git clone git://example.com/myproject
$ cd myproject

Bekijk vervolgens de lokale vestigingen in uw repository:

$ git branch
* master

Maar er zijn andere takken die zich verbergen in je repository! Je kunt deze zien met behulp van de -a vlag:

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

Als je even snel een kijkje wilt nemen in een upstream filiaal, kun je het meteen bekijken:

$ git checkout origin/experimental

Maar als u aan die branche wilt werken, moet u een lokale trackingtak maken die automatisch wordt uitgevoerd door:

$ git checkout experimental

en je zal zien

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

Die laatste regel gooit wat mensen: "Nieuwe tak" - hè? Wat het echt betekent, is dat de branch uit de index wordt gehaald en lokaal voor u wordt gemaakt. De voorgaand regel is eigenlijk meer informatief, omdat het vertelt dat de tak wordt ingesteld om de externe tak te volgen, wat meestal de tak oorsprong / vertakking betekent

Als u nu naar uw lokale vestigingen kijkt, ziet u dit:

$ git branch
* experimental
  master

Je kunt zelfs meer dan één externe repository volgen met git remote.

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

Op dit punt worden de dingen behoorlijk gek, dus ren gitk om te zien wat er aan de hand is:

$ gitk --all &

4020
2017-09-16 13:28



Als u veel externe takken hebt die u tegelijk wilt ophalen, doet u het volgende:

$ git pull --all

Nu kun je elk filiaal uitchecken zoals je wilt, zonder de remote repository te raken.


743
2018-01-13 16:42



Deze Bash script heeft me geholpen:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

Het zal volgtakken creëren voor alle remote branches, behalve master (die je waarschijnlijk kreeg van de originele clone-opdracht). Ik denk dat je misschien nog steeds een moet doen

git fetch --all
git pull --all

om zeker te zijn.

Oneliner: git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs Zoals gewoonlijk: test in uw opstelling voordat u rm -rf-universum kopieert zoals wij dat kennen

Credits voor one-liner gaan naar gebruiker cfi


379
2018-01-21 02:18



De ... gebruiken --mirror optie lijkt de kopie te kopiëren remote takken correct volgen. Het stelt de repository echter in als een bare repository, dus je moet het later weer terugzetten in een normale repository.

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

Referentie: Veelgestelde vragen over Git: Hoe kloon ik een repository met alle op afstand bewaakte branches?


279
2017-08-27 17:49



U kunt eenvoudig overschakelen naar een filiaal zonder de chique "git checkout -b somebranch origin / somebranch" -syntaxis. Je kunt gewoon doen:

git checkout somebranch

Git doet automatisch het juiste:

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git zal controleren of een vertakking met dezelfde naam in precies één afstandsbediening aanwezig is, en als dat zo is, dan volgt het hetzelfde pad op alsof je expliciet hebt aangegeven dat het een externe vertakking is. Van de git-checkout man pagina van Git 1.8.2.1:

Als <branch> niet wordt gevonden, maar er wel een trackingtak aanwezig is   precies één afstandsbediening (noem dit <afstand>) met een overeenkomende naam, behandel als   gelijk aan

$ git checkout -b <branch> --track <remote>/<branch>

204
2018-05-12 12:11



Met betrekking tot,

$ git checkout -b experimentele oorsprong / experimenteel

gebruik makend van

$ git checkout -t origin/experimental

of hoe uitgebreider maar gemakkelijker te onthouden

$ git checkout --track origin/experimental

misschien beter, in termen van het volgen van een externe repository.


88
2017-07-27 06:10



De fetch die je aan het doen bent zou alle remote branches moeten krijgen, maar het zal geen local branches voor hen creëren. Als u gitk gebruikt, zou u de remote branches moeten zien die worden beschreven als "afstandsbedieningen / oorsprong / dev" of iets dergelijks.

Om een ​​lokale branch te maken op basis van een externe branch, doe je zoiets als:

git checkout -b dev refs / afstandsbedieningen / oorsprong / dev

Die iets zou moeten teruggeven als:

Branch dev ingesteld om remote branch refs / remotes / origin / dev te volgen.
Overgeschakeld naar een nieuwe branch "dev"

Nu, wanneer je op de dev branch bent, zal "git pull" je lokale dev updaten naar hetzelfde punt als de remote dev branch. Merk op dat het alle takken zal ophalen, maar trek alleen degene die je bent naar de top van de boom.


77
2017-09-15 22:52