Różnice między git remote update a fetch?

Jest git remote update odpowiednikiem git fetch?

Author: JJD, 2009-12-06

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 i git remote prune mniej konieczne (nie ma jednak planu usunięcia remote update ani remote 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 i cherry-pick --stdin), tak samo zrobił git revert; nie wspierają one jednak ładniejszej kontroli sekwencjonowania rebase [-i].

 90
Author: Community,
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.

 138
Author: xenoterracide,
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