Odpowiedzi:
AKTUALIZACJA: więcej informacji!
Powinienem był to zrobić od samego początku: poznałem uwagi do wydania Git w repozytorium Git Git (więc meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Potem zrobiłem less
wyszukiwania --all
, a to co znalazłem pod Release Notes Git wersji 1.6.6 :
git fetch
nauczył się--all
i--multiple
opcje, aby uruchomić pobieranie z wielu repozytoriów, a także--prune
opcję usuwania zdalnych gałęzi śledzenia, które stały się nieaktualne. Sprawiają one,git remote update
agit remote prune
mniej konieczne (nie ma planu, aby usunąćremote update
aniremote prune
, choć).
Wersja 1.6.6 została wydana dopiero 23 grudnia 2009 roku , a oryginalny plakat zadał to pytanie 6 grudnia 2009 roku.
Jak widać z informacji o wydaniu, autorzy Git byli świadomi faktu, że git remote update
funkcjonalność polecenia była w pewnym stopniu powielana git fetch
, ale postanowili jej nie usuwać, być może ze względu na wsteczną kompatybilność z istniejącymi skryptami i programami, a może dlatego, że to po prostu za dużo pracy i są przedmioty o wyższym priorytecie.
Oryginalna odpowiedź z dodatkowymi szczegółami
Odpowiedź xenoterracide ma już 3,5 roku, a Git przeszedł przez kilka wersji od tego czasu (od wersji 1.5.5.5 do wersji 1.8.3.2 w tym tekście), i patrząc na aktualną dokumentację git remote update
i git fetch
wygląda na jak oni mogą wykonywać zarówno w zasadzie taką samą funkcję pobierania nowych zobowiązuje z wielu pilotów , biorąc pod uwagę odpowiednie opcje i argumenty.
Jednym ze sposobów pobierania wielu pilotów jest użycie --all
flagi:
git fetch --all
Spowoduje to pobranie ze wszystkich skonfigurowanych pilotów, przy założeniu, że ich nie remote.<name>.skipFetchAll
ustawiłeś:
Jeśli to prawda, ten pilot będzie domyślnie pomijany podczas aktualizacji za pomocą git-fetch (1) lub podkomendy aktualizacji git-remote (1) . - dokumentacja git-config
Byłoby to równoważne z użyciem
git remote update
bez określania grupy zdalnej do pobrania, a także bez remotes.default
ustawiania w konfiguracji repo, a także, że żaden z pilotów nie jest remote.<name>.skipDefaultUpdate
ustawiony na true.
Prąd 1.8.3.2 Dokumentacja dla konfiguracji git jest nie wspomnieć o remotes.default
ustawienie, ale konsultowany Wszechmogącego Google o nim i uznało tę pomocne wyjaśnienia od Mislav Marohnić :
$ 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 będą pobierane przez
remote update
polecenie. Mogą to być piloty od członków zespołu, zaufanych członków społeczności projektu typu open source lub podobne.
Przypuszczalnie więc, jeśli remotes.default
ustawiłeś, a nie wszystkie piloty są w nim wymienione, to git remote update
nie pobierze wszystkich pilotów, o których Twoje repozytorium jest „świadome”.
Jeśli chodzi o remote.<name>.skipDefaultUpdate
ustawienie, doktorzy Git wyjaśniają to w następujący sposób:
Jeśli to prawda, ten pilot będzie domyślnie pomijany podczas aktualizacji za pomocą git-fetch (1) lub podkomendy aktualizacji git-remote (1) .
Zamiast pobierania wszystkich pilotów, zarówno fetch
i remote update
pozwalają na określenie wielu pilotów i grupy pilotów, aby pobrać:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
pozwala pobrać wiele pilotów należących do grupy (pożyczyć inny przykład od Mislava ):
$ 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 dokumentów ):
Pozostawić kilka
<repository>
i<group>
argumenty, które zostaną określone. Nie<refspec>s
można określić.
Niejednoznaczność w git remote update
dokumentacji
Podsumowanie dlagit remote update
określa, że składnia polecenia jest następująca:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Zwróć uwagę na ostatnią część [(<group> | <remote>)…]
? Końcowe kropki ...
oznaczają, że możesz określić wiele grup i pilotów za pomocą polecenia, co oznaczałoby, że zachowuje się on tak samo jak git fetch --multiple
... widzisz, jak składnia między nimi jest taka podobna?
Jednak w tym samym dokumencie wyjaśnienie update
polecenia nie mówi nic o określaniu wielu argumentów grupowych i zdalnych, tylko tyle
Pobierz aktualizacje [es] dla nazwanego zestawu pilotów w repozytorium zdefiniowanym przez
remotes.<group>
.
Nie jest więc jasne, czy git remote update
działa identycznie git fetch --multiple
w odniesieniu do określania wielu pojedynczych pilotów i wielu zdalnych grup.
Wreszcie, wszyscy znają prosty przypadek pobrania jednego pilota:
git fetch <remote>
Może być tak, że możesz także użyć
git remote update <remote>
aby zrobić to samo, ale jak wspomniałem w poprzedniej sekcji, dokumentacja dla git remote update
nie jest jasna, czy możliwe jest pobranie czegoś innego niż pojedyncza grupa pilotów za pomocą polecenia.
Jak już wyjaśniono, git fetch
i git remote update
zachowują się podobnie w odniesieniu do pobierania z wielu pilotów. Dzielą one podobną składnię i argumenty, choć git fetch
są krótsze, więc ludzie prawdopodobnie łatwiej je pisać i używać.
Może być tak, że git remote update
nie można użyć do pobrania tylko jednego pilota git fetch
, ale jak wskazałem, dokumentacja nie wyjaśnia tego.
Na bok
Powielanie funkcjonalności między poleceniami porcelany Git, zilustrowanymi przez git fetch
i git remote update
powyżej, nie jest wyjątkowe. Zauważyłem podobną sytuację git rebase --onto
i git cherry-pick
, że oba mogą podjąć szereg zobowiązuje się do plastra do nowej bazy popełnił.
Wydaje mi się, że ponieważ Git ewoluował przez lata, niektóre funkcje zostały (nieuchronnie?) Zduplikowane, być może czasem dla wygody użytkowników końcowych (na przykład łatwiej jest przekazać zakres cherry-pick
, niż przekazywać pojedyncze zatwierdzenie w kółko wybrać zakres). Najwyraźniej cherry-pick
nie zawsze akceptował zakres zatwierdzeń, jak wyjaśniono w informacjach o wersji v1.7.2 :
git cherry-pick
nauczył się wybierać zakres zatwierdzeń (np.cherry-pick A..B
icherry-pick --stdin
), podobnie jakgit revert
; nie obsługują one jednak lepszej kontroli sekwencjonowaniarebase [-i]
.
Tak i nie. git remote update
pobiera ze wszystkich pilotów, nie tylko jednego.
Nie patrząc na kod, aby sprawdzić, czy remote update
jest tylko skryptem powłoki (możliwe), w zasadzie uruchamia pobieranie dla każdego pilota. git fetch
może być znacznie bardziej szczegółowy.
git remote update
, patrz strona git-remote.
git remote
nie jest skryptem powłoki, ale odradza się git fetch
podczas remote update
.
git fetch
opcje polecenia dla git remote update
?
git fetch --all
git rebase
jest jakmv
igit cherry-pick
jest jakcp
.--onto
Przełącznik nie zmieni. Możesz uzyskać efekt kopiowaniagit rebase
tylko wtedy, gdy określisz wartości SHA1, w przeciwnym razie twoja gałąź zostanie przeniesiona!