Różnice między git remote update a fetch?
Jest git remote update
odpowiednikiem git fetch
?
2 answers
Aktualizacja: więcej informacji!
Powinienem był to zrobić od samego początku: wrzuciłem uwagi do wydania Git w Git repo (więc meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Następnie wykonałem less
wyszukiwanie --all
i to znalazłem pod uwagami do wydania dla wersji Git 1.6.6:
git fetch
wyuczone opcje--all
i--multiple
, uruchamianie fetch z wielu repozytoriów oraz opcja--prune
usuwania zdalnych gałęzi śledzenia, które stały się przestarzałe. Te tworzągit remote update
igit remote prune
mniej konieczne (nie ma jednak planu usunięciaremote update
aniremote prune
).
Wersja 1.6.6 została wydana dopiero 23 grudnia 2009, A oryginalny plakat zadał mu pytanie 6 grudnia 2009.
Więc jak widać z informacji o wydaniu, autorzy Git byli świadomi faktu, że funkcjonalność git remote update
komend była w pewnym stopniu powielana przez git fetch
, ale zdecydowali się jej nie usuwać, być może ze względu na wsteczną kompatybilność z istniejącymi skryptami i programów, a może dlatego, że to po prostu za dużo pracy i są rzeczy o wyższym priorytecie.
Oryginalna odpowiedź ze szczegółami
Odpowiedź Xenoteracide ma już 3,5 roku i od tego czasu Git przeszedł kilka wersji (odszedł od v1.6.5.5 do v1.8.3. 2 Jak to pisze), a patrząc na obecny dokumentacja dla git remote update
oraz git fetch
, wygląda na to, że oba mogą wykonywać zasadniczo tę samą funkcję pobierania nowych zatwierdzeń z wielu pilotów, biorąc pod uwagę właściwe opcje i argumenty.
Pobieranie wszystkich pilotów
Aby pobrać wiele pilotów, należy użyć flagi--all
:
git fetch --all
Pobierze to ze wszystkich skonfigurowanych pilotów, zakładając, że nie masz dla nich ustawionego remote.<name>.skipFetchAll
:
Jeśli true, ten pilot będzie domyślnie pomijany podczas aktualizacji za pomocą git-fetch(1) lub podkatalog aktualizacji git-remote (1) . - dokumentacja git-config
Byłoby to równoważne użyciu
git remote update
Bez podania zdalnej grupy do pobrania, a także nie mając remotes.default
ustawionego w konfiguracji repo, a także, że żaden z pilotów nie ma remote.<name>.skipDefaultUpdate
ustawionego na true.
Aktualna dokumentacja 1.8.3.2 dla konfiguracji Gita nie wspomina o ustawieniach remotes.default
, ale skonsultowałem W 2011 roku, po raz pierwszy w Polsce, w Polsce i za granicą, w 2012 roku, w Polsce i na świecie, w 2013 roku, w 2015 roku, w Polsce i na świecie.]}
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Możesz zdefiniować domyślną listę pilotów, które zostaną pobrane przez
remote update
. Mogą to być piloty od kolegów z zespołu, zaufanych członków społeczności projektu opensource lub podobne.
Więc prawdopodobnie, jeśli masz remotes.default
ustawione, a nie wszystkie piloty są wymienione w nim, to git remote update
nie pobierze wszystkich pilotów, które twój repo jest "świadomy".
Jako piloty, które są częścią grupy (aby pożyczyć inny przykład z Mislav):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
pozwala określić kilka repozytoriów i grup repozytoriów do pobrania jednocześnie (z docs):
Pozwala na podanie kilku argumentów
<repository>
i<group>
. Nie można podać<refspec>s
.
Niejednoznaczność w git remote update
dokumentacji
Streszczenie dla git remote update
określa składnię polecenia jako następuje:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Zauważ ostatnią część, [(<group> | <remote>)…]
? Kropki końcowe ...
sugerują, że można określić wiele grup i pilotów za pomocą polecenia, co oznaczałoby, że zachowuje się tak samo jak git fetch --multiple
...widzisz, jak składnia między nimi jest tak podobna?
Jednak w tym samym dokumencie Wyjaśnienie polecenia update
nie mówi nic o określeniu wielu grup i odległych argumentów, tylko że
Pobierz [es] aktualizacje dla nazwanego zestawu pilotów w repozytorium zdefiniowane przez
remotes.<group>
.
Więc nie jest jasne, czy git remote update
działa identycznie jak git fetch --multiple
W odniesieniu do określania wielu pojedynczych pilotów i wielu odległych grup.
Pobieranie pojedynczego pilota
W końcu każdy zna prosty przypadek pobierania jednego pilota:]}git fetch <remote>
Może być tak, że możesz również użyć
git remote update <remote>
Zrobić to samo, ale jak wspomniałem w poprzedniej sekcji, dokumentacja dla git remote update
jest nie wiadomo, czy można pobrać coś innego niż pojedynczy Grupa piloty z komend.
Wrapup
Jak już wyjaśniłem, git fetch
i git remote update
zachowują się podobnie w odniesieniu do pobierania z wielu pilotów. Mają podobną składnię i argumenty, choć git fetch
jest krótsza, więc ludzie prawdopodobnie łatwiej pisać i używać.
Może być tak, że git remote update
nie może być użyty do pobrania tylko jednego pilota, jak z git fetch
, ale jak już wspomniałem, dokumentacja tego nie wyjaśnia.
Na bok
Powielanie funkcjonalności pomiędzy poleceniami Git porcelain, na przykładzie git fetch
i git remote update
powyżej, nie jest unikalne. Zauważyłem podobną sytuację z git rebase --onto
oraz git cherry-pick
, w tym celu oba mogą przyjąć zakres zmian, aby wprowadzić poprawki do nowego commita bazowego.
Myślę, że ponieważ Git ewoluował przez lata, niektóre funkcjonalności były (nieuchronnie?) zduplikowany, być może czasami dla wygody użytkowników końcowych (na przykład, łatwiej jest przekazać zakres cherry-pick
, niż przekazać pojedynczy commit w kółko, aby wybrać zakres). Najwidoczniej cherry-pick
nie zawsze akceptował zakres zmian, jak wyjaśniono w Uwagach do wydania v1.7.2:
git cherry-pick
nauczył się wybierać zakres commitów (np.cherry-pick A..B
icherry-pick --stdin
), tak samo zrobiłgit revert
; nie wspierają one jednak ładniejszej kontroli sekwencjonowaniarebase [-i]
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:19
Tak i nie. git remote update
pobiera wszystkie piloty, nie tylko jeden.
Bez patrzenia na kod, aby sprawdzić, czy remote update
jest tylko skryptem powłoki (możliwe), w zasadzie uruchamia fetch dla każdego pilota. Może być znacznie bardziej ziarnisty.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-06 20:51:17