Kiedy git branch -r
biegasz, dlaczego do licha ma listę origin/HEAD
? Na przykład istnieje zdalne repozytorium na GitHub, powiedzmy, z dwiema gałęziami: master i awesome-feature. Jeśli zrobię, git clone
aby go pobrać, a następnie przejść do mojego nowego katalogu i wyświetlić listę gałęzi, widzę to:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
Albo w jakimkolwiek porządku (alfa? Udaję ten przykład, aby zachować w tajemnicy tożsamość niewinnego repozytorium). Więc o co chodzi HEAD
? Czy to co ostatnią osobą, która push
miała ich HEAD
wskazał kiedy pchali? Czy to nie zawsze będzie tym, czym oni byli push
? HEAD
s poruszać się ... dlaczego mnie obchodzi, na co ktoś HEAD
wskazuje na innym komputerze?
Po prostu rozumiem zdalne śledzenie i takie tam, więc jest to jedno trwałe zamieszanie. Dzięki!
EDYCJA: Miałem wrażenie, że dedykowane zdalne repozytoria (takie jak GitHub, gdzie nikt nie będzie ssh wchodził i nie pracował nad tym kodem, ale tylko ciągnie lub pchają itp.) Nie i nie powinien mieć HEAD, ponieważ w zasadzie istniał brak kopii roboczej. Skąd?
źródło
Odpowiedzi:
@robinst jest poprawne.
W git możesz wybrać, która gałąź jest domyślnie pobierana (np. Kiedy klonujesz). Domyślnie
origin/HEAD
będzie na to wskazywać.W serwisie GitHub możesz to zmienić w ustawieniach administratora repozytorium GitHub. Możesz to również zrobić z wiersza poleceń za pomocą
lub usuń go całkowicie za pośrednictwem
Przykład . Spójrz na menu rozwijane „Przełącz gałęzie”.
trunk
jest zaznaczone, więcorigin/HEAD
następujetrunk
.źródło
origin
iotherremote/HEAD -> master
przeszkadzał mi. Wykonanie twojego polecenia naprawiło to dla mnie.Powodem, dla którego nagie repozytorium może mieć HEAD, jest to, że określa, która gałąź jest początkowo wypisywana po sklonowaniu repozytorium.
Zwykle HEAD wskazuje na master, a to jest gałąź, która jest sprawdzana, kiedy ludzie klonują repozytorium. Ustawienie go na inną gałąź (poprzez edycję HEAD w czystym repozytorium) powoduje, że ta gałąź jest wyewidencjonowana na klon.
źródło
origin/HEAD
czy lokalne odniesienie jest poprawne? Czy jej usunięcie ma wpływ naorigin
?origin/master
nie wpływa na pilota.Miałem dokładnie takie samo wrażenie, jak powiedziałeś.
I nawet nie mogę usunąć tej gałęzi zdalnego śledzenia pochodzenia / HEAD sklonowanej z github przez wykonanie
Nie przyniosło to żadnego skutku.
Czy ktoś może mi powiedzieć, jak mogę usunąć tę gałąź zdalnego śledzenia pochodzenia / HEAD?
aktualizacja
Chociaż nie znalazłem, dlaczego istnieje źródło / HEAD utworzone podczas klonowania z github, znajduję sposób, aby go usunąć.
Nowa wersja git zapewnia
aby usunąć bezużyteczny wskaźnik HEAD gałęzi zdalnego śledzenia.
Możemy również zmienić głupią domyślną nazwę „pochodzenie” na cokolwiek chcemy, używając
Mam nadzieję, że to pomoże. :)
źródło
git remote set-head origin -d
Masz rację, że wypychanie do dedykowanych repozytoriów zdalnych działa znacznie lepiej, gdy są „puste”, to znaczy, gdy nie mają działających katalogów. Architektura Gita jest zaprojektowana do aktualizowania przez poprawki lub
pull
(fetch
), co ma sens w rozproszonym VCS. Jak gdzieś mówią dokumenty, wypchnięcie do gałęzi, która jest aktualnie wyewidencjonowana, może spowodować „nieoczekiwane wyniki” .HEAD jest częścią wymagań dotyczących prawidłowego repozytorium. Układ repozytorium Git mówi po części:
Więc zobaczysz HEAD jako część listy gałęzi, nawet jeśli „to niewiele znaczy ...”
źródło
mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "[email protected]"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
zwraca wartość true. Nie ma również kopii roboczej przesłanego pliku w repozytorium foobar po tych poleceniach.mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "[email protected]"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
zwraca wartość true. Nie ma również kopii roboczej wypchniętego pliku w repozytorium foobar po tych poleceniach.Jeśli „źródło” jest zdalnym repozytorium, to źródło / HEAD identyfikuje domyślną gałąź w tym zdalnym repozytorium.
Przykład:
Zwróć uwagę na linię z napisem „HEAD branch: master”. W tym miejscu repozytorium zdalne informuje klientów, z której gałęzi mają domyślnie pobierać płatności.
źródło
Zawsze jest nagłówek HEAD wskazujący na aktualnie wyewidencjonowaną gałąź w zdalnym repozytorium (która może być główną lub nie). Nawet zdalne repozytoria mają aktualne gałęzie. Zwykle jest to mistrz i nie przychodzi mi do głowy żaden powód, dla którego ktoś chciałby to zmienić, ale można to zmienić.
źródło
Domyślam się, że ktoś pchnął gałąź i nazwał ją HEAD:
źródło