2014-11-22 31 views
15

Jak widać, zarówno git --track, jak i --set-upstream-to modyfikują gałąź, aby stała się gałęzią śledzącą (lub wyższą). Ale gdzie jest subtelna różnica, której nie mogę pojąć. W --track rekordy „tory zdalnego oddziałów lokalnych”:Jaka jest różnica między git "--track" i "--set-upstream-to"?

$ git checkout foo -b 
$ git branch --track origin/retarget 

Branch origin/retarget set up to track local branch foo. 

$ cat .git/config 
[branch "origin/retarget"] 
     remote = . 
     merge = refs/heads/foo 

Podczas gdy --set-upstream-to Rejestry „lokalne utworów Branża zdalny oddział”:

$ git checkout foo -b 
$ git branch --set-upstream-to origin/retarget 

Branch foo set up to track remote branch retarget from origin. 

$ cat .git/config 
[branch "foo"] 
     remote = origin 
     merge = refs/heads/retarget 

Jaka jest różnica między tym dwa? Byłem pewien, że "gałąź śledzenia" jest prostą koncepcją z dodatkowym znacznikiem upstream wewnątrz gałęzi, który śledzi pozycję określonego oddziału w repozytorium remote. Ale wydaje się, że jest to o wiele bardziej skomplikowane?

Odpowiedz

6
$ git checkout foo -b 
$ git branch --track origin/retarget 

dwóch pierwszych poleceń instruować git do:

  • utworzyć lokalny oddział o nazwie „origin/retarget” (bardzo zły pomysł, ponieważ jest to nazwane jako zdalny oddział śledzenia”, podczas gdy w rzeczywistości jest to prosty lokalny oddział z „/” w nazwie)
  • począwszy od bieżącego oddziału („foo”, kolejny lokalny oddział)
  • aby to nowy lokalny oddział śledzenia punktu początkowego.

Zobacz git branch

--track 

Tworząc nowy oddział, ustanowiony branch.<name>.remote i branch.<name>.merge wpisy konfiguracyjne, aby zaznaczyć początek oddział-punktową jako „upstream” z nowego oddziału.

Ścieżka będzie używana podczas tworzenia odgałęzienia, zaczynając od zdalnego śledzenia.

Innymi słowy, pierwszym przykładem nie jest sposób użycia --track.
to będzie działać lepiej:

git checkout -b foo --track origin/retarget 

chodzi o różnicę między --track i --set-upstream-to:

--set-upstream-to 

Jeśli określony oddział jeszcze nie istnieje lub jeśli --force została podana, akty dokładnie tak jak --track.
W przeciwnym razie konfiguracja taka jak --track byłaby możliwa podczas tworzenia gałęzi, , z wyjątkiem tego, że punkty rozgałęzienia nie uległy zmianie.

3

Załóżmy, że masz jedną gałąź master, która jest wyrejestrowana.Teraz, kiedy wykonujesz

$ git branch --track someBranch 

będzie tworzyć nowy oddział o nazwie someBranch których zmiany będą śledzone według master gałęzi. Ale ta gałąź nie ma ustawionego oddziału zdalnego. Tak więc widzisz remote = . w konfiguracji git.

Po zarejestrowaniu someBranch oznacza to, że zmiany pojawią się w git status i git branch -v, tak jakby pilot istniał.

Na przykład, jeśli wykorzysta popełnić na someBranch git powie ci, że jesteś 1 ahead kiedy wykonujesz git branch -v lub kiedy wykonujesz git status to pokazuje

Your branch is ahead of 'master' by 1 commit. 

I to jest interesująca część. Oddział jest śledzony, a git pokazuje, że jest to 1 zatwierdzenie przed master (gałąź, która została wyewidencjonowana po utworzeniu someBranch)

Powiązane problemy