2013-03-13 17 views
50

Kiedy wciskam nowy oddział do zdalnego repozytorium poprzez Git Extensions, otrzymuję alert mówiącyCo to jest odwołanie do śledzenia?

The branch {branch name} does not have a tracking reference. Do 
you want to add a tracking reference for {branch name}? 

Co jest odniesienie śledzenia? Znalazłem tylko kilka wzmianek o śledzących odniesieniach w Google i nie ma prawdziwej definicji.

+2

Zobacz push -u dla miarki. – bmargulies

+0

Jeśli dobrze rozumiem strony git man dla push, pull i config poprawnie, odniesienie do śledzenia jest ustawieniem lub ustawieniami dodanymi do pliku konfiguracyjnego, używanego przez git-pull bez argumentów, aby powiedzieć mu, co ma zostać usunięte. Uważam, że dokumentacja jest trochę zagmatwana, ale moim zdaniem jest odniesienie do śledzenia, które jest kombinacją następujących ustawień w pliku konfiguracyjnym: remote. . Pobierz i oddziału. .merge. Czy to jest poprawne? –

Odpowiedz

21

Podstawową ideą jest to, że istnieją wyłącznie lokalne odwołania (np. Gałęzie, tagi), a następnie istnieją zdalne odwołania do śledzenia, które śledzą to, co dzieje się w innych repozytoriach. Ponieważ Git jest zdecentralizowany, możliwe jest, aby wybrać nazwę dla gałęzi, która jest taka sama jak używana w pilocie, nie wiedząc o drugiej, tak, że mają zupełnie inną pracę nad nimi. Git pozwala ci to zrobić, ale zapewnia także możliwość łączenia lokalnych odwołań do zdalnych.

Na przykład, należy rozważyć następujące kwestie:

% git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/maint 
    remotes/origin/master 
    remotes/origin/next 
    remotes/origin/pu 
    remotes/origin/todo 

Tutaj mamy oddziały na origin zwanego next i todo.

% git checkout -t remotes/origin/next 
Branch next set up to track remote branch next from origin. 
Switched to a new branch 'next' 
% git branch todo  

Teraz mamy lokalnym oddziałem next która śledzi zdalnego oddziału tej samej nazwie i lokalnym oddziale todo że nie będą aktualizowane ze zmianami remotes/origin/todo.

+0

Dzięki. Zatem "odniesienie" jest po prostu obiektem, jak gałąź lub znacznik, a "odniesienie do śledzenia" jest tylko obiektem, który jest powiązany z odpowiednim obiektem w odległym repozytorium? –

+2

Tak - to jest główny pomysł. "obiekt" ma specjalne znaczenie w Git; oznacza to wszystko z SHA1, który jest przechowywany pod .git/objects, więc jest bardziej ogólny niż "reference", ale taki jest pomysł. –

+15

Sooo, uhhhh, ktokolwiek chce polecić, czy powinniśmy powiedzieć TAK czy NIE? "Czy chcesz dodać referencję śledzenia do wzorca"? Wszystko to jest nadal mylące w kategoriach praktycznych. Co jest zwykle wybierane? Czy istnieją jakieś zalety i wady każdej z tych opcji? Czy można powiedzieć "TAK" i po prostu o tym zapomnieć, nie powodując żadnych problemów? –

5

Nick Quaranto za doskonały blog git gotowy ma post wyjaśniający remote tracking branches:

gałęzie zdalnego śledzenia mieć kilka różnych celów:

  • Są one wykorzystywane do łączenia co” działa lokalnie w porównaniu do tego, co jest na pilocie.

  • Będą automatycznie wiedzieć, która gałąź zdalna może uzyskać zmiany z podczas korzystania z pobierania git lub git.

  • Jeszcze lepiej, status git rozpozna, ile razy jesteś w wersji przed zdalną wersją oddziału.

5

Miejscowy oddział git można śledzić zdalną gałąź, co oznacza, że ​​git Push i polecenia git pull dowie się pchają i ciągną zobowiązuje do iz gąsienicowego oddziału domyślnie. Również status git poinformuje Cię o statusie pomiędzy twoim bieżącym oddziałem lokalnym a zdalnym oddziałem, który śledzi. Kiedy sklonujesz repozytorium git, git doda odnośnik śledzenia do lokalnej gałęzi master, aby śledzić zdalną gałąź master. Kiedy wymeldujesz się z nowej zdalnej gałęzi, git doda referencję śledzenia do utworzonego lokalnego oddziału, aby śledzić zdalną gałąź, którą wypisałeś.

Jeśli jednak lokalnie utworzono nowy oddział, a następnie przekazano go do zdalnego repozytorium, należy jawnie powiedzieć git, jeśli chcesz, aby lokalny oddział zaczął śledzić nowy zdalny oddział. Zrobisz to za pomocą opcji -u lub --set-upstream, przesuwając gałąź lokalną do zdalnego repozytorium: git push -u origin my-new-branch.

Możesz sprawdzić, które oddziały zdalne śledzą lokalne oddziały (jeśli występują) za pomocą komendy git branch -vv Poniżej znajduje się mały przykład danych wyjściowych.

b1  560eb64 Added file.txt 
    b2  560eb64 [origin/b2] Added file.txt 
    b3  b638c18 [origin/r1: ahead 1] Added file3.txt 
* master 560eb64 [origin/master] Added file.txt 

W tym przypadku mamy lokalne oddziały master, b1, b2 i b3. master oddział śledzi zdalnego oddział o nazwie master The b1 oddział nie śledzi żadnych zdalnych oddziałów, b2 oddział śledzi zdalny oddział zwany b2 i b3 oddział śledzi zdalny oddział zwany r1. git branch -vv również pokazuje stan odgałęzienia powiązanego z odgałęzieniem śledzonym. Tutaj oddział b3 jest 1 zatwierdzony przed śledzonym oddziałem zdalnym, a pozostałe oddziały są aktualne z ich odpowiednimi zdalnie śledzonymi oddziałami.

Więc jeśli utworzysz gałąź lokalną i przełączysz się do zdalnego repozytorium, czy chcesz dodać referencję śledzenia do gałęzi, czy nie? Zwykle, gdy przenosisz nową lokalną gałąź do zdalnego repozytorium, robisz to, aby współpracować z innymi programistami na danej funkcji. Jeśli dodasz odniesienie do śledzenia do oddziału lokalnego, możesz wygodnie pobrać zmiany wprowadzone przez inne osoby do oddziału, więc powiedziałbym, że w większości przypadków chcesz dodać referencję śledzenia.

1

Tak, prawdopodobnie chcesz go dodać. zrób to w konsoli: git branch - set-upstream-to origin/master