Ist git remote update
das Äquivalent von git fetch
?
quelle
UPDATE: Weitere Informationen!
Ich hätte das von Anfang an tun sollen: Ich habe die Git-Versionshinweise in Git's Git-Repo gelesen (also Meta!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Dann habe ich nach less
gesucht --all
und dies habe ich unter den Versionshinweisen für Git Version 1.6.6 gefunden :
git fetch
Gelernt--all
und--multiple
Optionen, um das Abrufen aus vielen Repositorys auszuführen, und die--prune
Option, veraltete Remote-Tracking-Zweige zu entfernen. Diese machengit remote update
undgit remote prune
weniger notwendig (es gibt jedoch keinen Plan zu entfernenremote update
oderremote prune
).
Version 1.6.6 wurde erst am 23. Dezember 2009 veröffentlicht , und das Originalposter stellte seine Frage am 6. Dezember 2009.
Wie Sie den Versionshinweisen entnehmen können, waren sich die Autoren von Git der Tatsache bewusst, dass die git remote update
Befehlsfunktionalität etwas dupliziert wurde git fetch
, aber sie beschlossen, sie nicht zu entfernen, möglicherweise aus Gründen der Abwärtskompatibilität mit vorhandenen Skripten und Programmen oder weil Es ist einfach zu viel Arbeit und es gibt Elemente mit höherer Priorität.
Ursprüngliche Antwort mit mehr Details
xenoterracide Antwort ist 3,5 Jahre alt jetzt, und Git hat sich seitdem durch mehrere Versionen gegangen (es von gegangen ist v1.6.5.5 auf v1.8.3.2 als dies geschrieben wurde ), und suchen Sie in der aktuellen Dokumentation git remote update
und git fetch
sieht es so aus Als ob beide im Grunde die gleiche Funktion zum Abrufen neuer Commits von mehreren Fernbedienungen ausführen könnten , wenn die richtigen Optionen und Argumente gegeben wären .
Eine Möglichkeit, mehrere Fernbedienungen abzurufen, ist das --all
Flag:
git fetch --all
Dadurch werden alle konfigurierten Fernbedienungen abgerufen, sofern Sie keine remote.<name>.skipFetchAll
Einstellungen vorgenommen haben:
Wenn true, wird diese Fernbedienung beim Aktualisieren mit git-fetch (1) oder dem Unterbefehl update von git-remote (1) standardmäßig übersprungen . - git-config Dokumentation
Dies wäre gleichbedeutend mit der Verwendung
git remote update
ohne Angabe einer Remote-Gruppe, die abgerufen werden soll, und ohne dass dies remotes.default
in Ihrer Repo-Konfiguration festgelegt wurde und dass keine Ihrer Fernbedienungen remote.<name>.skipDefaultUpdate
auf true gesetzt wurde.
In der aktuellen 1.8.3.2-Dokumentation für die Konfiguration von Git wird die remotes.default
Einstellung nicht erwähnt , aber ich habe The Almighty Google dazu konsultiert und diese hilfreiche Erklärung von Mislav Marohnić gefunden :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Sie können eine Standardliste von Fernbedienungen definieren, die vom
remote update
Befehl abgerufen werden sollen . Dies können Fernbedienungen von Ihren Teamkollegen, vertrauenswürdigen Community-Mitgliedern eines Open Source-Projekts oder ähnlichem sein.
Wenn Sie also remotes.default
festgelegt haben und nicht alle Ihre Fernbedienungen darin aufgeführt sind, git remote update
werden vermutlich nicht alle Fernbedienungen abgerufen, die Ihrem Repo "bekannt" sind.
Die remote.<name>.skipDefaultUpdate
Einstellung wird in den Git-Dokumenten folgendermaßen erklärt:
Wenn true, wird diese Fernbedienung beim Aktualisieren mit git-fetch (1) oder dem Unterbefehl update von git-remote (1) standardmäßig übersprungen .
Anstatt alle Fernbedienungen zu holen, die beide fetch
und remote update
ermöglicht es Ihnen , mehrere Fernbedienungen und Gruppen von Fernbedienungen angeben zu holen:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
Mit dieser Option können Sie mehrere Fernbedienungen abrufen, die Teil einer Gruppe sind (um ein weiteres Beispiel von Mislav auszuleihen ):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
Mit dieser Option können Sie mehrere Repositorys und Repository-Gruppen angeben, die gleichzeitig abgerufen werden sollen (aus den Dokumenten ):
Lassen Sie mehrere
<repository>
und<group>
Argumente angeben. Nein<refspec>s
kann angegeben werden.
Mehrdeutigkeit in der git remote update
Dokumentation
Die Inhaltsangabe fürgit remote update
gibt an, dass die Befehlssyntax wie folgt lautet:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Beachten Sie den letzten Teil [(<group> | <remote>)…]
? Die nachfolgenden Punkte ...
implizieren, dass Sie mit dem Befehl mehrere Gruppen und Fernbedienungen angeben können. Dies würde bedeuten, dass er sich genauso verhält wie git fetch --multiple
... sehen Sie, wie ähnlich die Syntax zwischen den beiden ist?
Im selben Dokument update
sagt die Erklärung für den Befehl jedoch nichts über die Angabe mehrerer Gruppen- und Remote-Argumente aus, sondern nur darüber
Rufen Sie [es] Updates für einen benannten Satz von Fernbedienungen im Repository ab, wie durch definiert
remotes.<group>
.
Es ist daher unklar, ob die Angabe mehrerer einzelner Fernbedienungen und mehrerer entfernter Gruppen git remote update
identisch ist git fetch --multiple
.
Schließlich kennt jeder den einfachen Fall, eine einzelne Fernbedienung abzurufen:
git fetch <remote>
Möglicherweise können Sie auch verwenden
git remote update <remote>
git remote update
Um dasselbe zu tun, aber wie ich im vorherigen Abschnitt erwähnt habe, ist in der Dokumentation für unklar, ob es möglich ist, mit dem Befehl etwas anderes als eine einzelne Gruppe von Fernbedienungen abzurufen .
Wie ich erklärt habe, git fetch
und git remote update
verhalten Sie sich beim Abrufen von mehreren Fernbedienungen ähnlich. Sie haben eine ähnliche Syntax und ähnliche Argumente, git fetch
sind jedoch kürzer, sodass die Benutzer wahrscheinlich leichter tippen und verwenden können.
Es kann sein, dass git remote update
nicht nur eine einzelne Fernbedienung wie mit abgerufen werden kann git fetch
, aber wie ich bereits erwähnt habe, wird dies in der Dokumentation nicht klargestellt.
Beiseite
Die doppelte Funktionalität zwischen Git-Porzellanbefehlen, die durch git fetch
und git remote update
über veranschaulicht wird , ist nicht eindeutig. Ich habe eine ähnliche Situation mit git rebase --onto
und festgestellt git cherry-pick
, da beide eine Reihe von Commits benötigen, um auf ein neues Basis-Commit zu patchen.
Ich denke, da sich Git im Laufe der Jahre weiterentwickelt hat, wurden einige Funktionen (unvermeidlich?) Dupliziert, vielleicht manchmal als Annehmlichkeit für Endbenutzer (zum Beispiel ist es einfacher, einen Bereich an zu übergeben cherry-pick
, als ein einzelnes Commit immer wieder zu übergeben einen Bereich auswählen). Anscheinend cherry-pick
wurden nicht immer verschiedene Commits akzeptiert, wie in den Versionshinweisen zu Version 1.7.2 erläutert :
git cherry-pick
lernte, eine Reihe von Commits (z. B.cherry-pick A..B
undcherry-pick --stdin
) auszuwählen, und tat dies auchgit revert
; Diese unterstützen jedoch nicht die schönere Sequenzierungskontrollerebase [-i]
.
git rebase
ist wiemv
undgit cherry-pick
ist wiecp
. Der--onto
Schalter ändert das nicht. Sie könnengit rebase
nur dann einen Kopiereffekt erzielen, wenn Sie SHA1-Werte angeben. Andernfalls wird Ihr Zweig verschoben!Ja und nein.
git remote update
holt von allen Fernbedienungen, nicht nur von einer.Ohne auf den Code zu schauen, um festzustellen, ob
remote update
es sich nur um ein Shell-Skript handelt (möglich), wird im Grunde Fetch für jede Fernbedienung ausgeführt.git fetch
kann viel körniger sein.quelle
git remote update
(siehe git-remote-Manpage).git remote
ist es kein Shell-Skript, aber es erscheintgit fetch
während einesremote update
.git fetch
Befehlsoptionen für agit remote update
?git fetch --all