Die Unterschiede zwischen den git Remote-Update und holen?
-
13-09-2019 - |
Frage
das Äquivalent von git remote update
Ist git fetch
?
Lösung
UPDATE: Weitere Informationen
ich dies von Anfang an hätte tun sollen: (! So meta) ich die Git Release Notes in Git Git Repo grep
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Dann habe ich eine less
Suche nach --all
, und das ist, was ich unter dem Release notes für Git Version 1.6.6 :
git fetch
gelernt--all
und--multiple
Optionen, laufen aus vielen Repositories zu holen, und--prune
Option Remote-Tracking-Zweige zu entfernen, die abgestanden ging. Diese machengit remote update
undgit remote prune
weniger notwendig (es gibt keinen Planremote update
nochremote prune
zu entfernen, obwohl).
Version 1.6.6 wurde nicht freigegeben, bis Dezember 23. 2009 und das Originalposter gebeten, seine Frage am 6. Dezember 2009.
So wie können Sie in den Versionshinweisen sehen, die Autoren von Git der Tatsache bewusst waren, dass die git remote update
Befehl Funktionalität etwas von git fetch
dupliziert wurde, aber sie beschlossen, es nicht zu entfernen, vielleicht für die Abwärtskompatibilität mit vorhandenen Skripten und Programme, oder vielleicht, weil es einfach zu viel Arbeit und es gibt eine höhere Priorität Elemente.
Original Antwort mit mehr Details
xenoterracide Antwort beträgt 3,5 Jahre alt geworden, und Git hat sich seitdem durch mehrere Versionen gegangen (es ist weg von v1.6.5.5 zum Zeitpunkt des Schreibens v1.8.3.2) und an der Strom Dokumentation git remote update
und git fetch
, sieht es aus wie sie> starke < beide können im Grunde durchführen die gleiche Funktion von neuen Commits von mehreren Fernbedienungen zu holen , die richtigen Optionen und Argumente gegeben.
Fetching alle Fernbedienungen
Eine Möglichkeit, mehr Fernbedienungen mit der --all
Flagge zu holen:
git fetch --all
Dieses von allen Ihren konfigurierten Fernbedienungen holen wird, vorausgesetzt, dass Sie nicht remote.<name>.skipFetchAll
Satz für sie haben:
Wenn das stimmt, wird diese Fernbedienung standardmäßig übersprungen werden, wenn die Aktualisierung mit git-fetch (1) oder das Update subcommand von git-Fernbedienung (1) . - git-config-Dokumentation
Dies wäre gleichbedeutend mit mit
git remote update
ohne jede Remote-Gruppe zu spezifizieren, zu holen und auch remotes.default
Satz in Ihrer Repo-Konfiguration nicht mit, und auch, dass keine Ihrer Fernbedienungen hat auf true remote.<name>.skipDefaultUpdate
gesetzt.
Die aktuelle 1.8.3.2 Dokumentation für Git Konfiguration nicht die remotes.default
Einstellung nicht erwähnt, aber ich konsultierte der Allmächtige Google darüber und fanden diese Informationen hilfreich explAnation von Mislav Marohnic wissen :
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Sie können eine Standardliste von Fernbedienungen definieren durch den
remote update
Befehl geholt werden. Diese können Fernbedienungen sein von Ihren Teamkollegen, vertrauenswürdige Community Mitglieder eines Open-Source-Projekt, oder ähnliches.
So vermutlich, wenn Sie remotes.default
gesetzt haben, und nicht alle Ihre Fernbedienungen darin aufgeführt sind, dann werden git remote update
nicht alle Fernbedienungen holen, die Ihre Repo ist „bewusst“.
Wie für die remote.<name>.skipDefaultUpdate
Einstellung, es erklärt die Git docs so:
Wenn das stimmt, wird diese Fernbedienung standardmäßig übersprungen werden, wenn die Aktualisierung mit git-fetch (1) oder das Update subcommand von git-Fernbedienung (1) .
eine bestimmte Gruppe von Fernbedienungen Fetching
Anstatt alle Fernbedienungen zu holen, die beide fetch
und remote update
können Sie mehrere Fernbedienungen und Gruppen von Fernbedienungen angeben zu holen:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
ermöglicht es Ihnen, mehrere Fernbedienungen zu holen, die Teil einer Gruppe (leihweise ein weiteres Beispiel von Mislav ) wussten:
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
können Sie verschiedene Repositories und Repository-Gruppen angeben, auf einmal zu holen (von die Dokumentation ):
Lassen Sie mehrere
<repository>
und<group>
Argumente angegeben werden. Keine<refspec>s
angegeben werden.
Mehrdeutigkeit in git remote update
Dokumentation
Die Synopsis für git remote update
gibt an, daß die Befehlssyntax ist wie folgt:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Beachten Sie den letzten Teil, [(<group> | <remote>)…]
? Die hinteren Punkte ...
implizieren, dass Sie mehrere Gruppen und Fernbedienungen mit dem Befehl angeben können, was bedeuten würde, es auf die gleiche Art und Weise wie git fetch --multiple
verhält ... sehen, wie die Syntax zwischen den beiden ist so ähnlich?
Doch in demselben Dokument, die Erklärung für den update
Befehl sagt nichts über mehrere Gruppen und Fern Argumente spezifiziert, nur, dass es
Fetch [es] Updates für eine benannte Gruppe von Fernbedienungen im Repository definiert durch
remotes.<group>
.
Es ist also unklar, ob git remote update
funktioniert identisch in Bezug auf git fetch --multiple
auf mehrere einzelne Fernbedienungen und mehrere Remote-Gruppen angeben.
Lesen einer einzigen Fernbedienung
Schließlich weiß jeder, den einfachen Fall eine einzige Fernbedienung zu holen:
git fetch <remote>
Es könnte der Fall sein, dass Sie auch verwenden können,
git remote update <remote>
, um das Gleiche zu tun, aber wie ich im vorigen Abschnitt erwähnte, ist die Dokumentation für git remote update
ist unklar, ob es möglich ist, etwas anderes als eine einzelne Gruppe holen von Fernbedienungen mit dem Befehl.
Nachbearbeiten
Wie ich bereits erklärt habe, git fetch
und git remote update
verhalten sich ähnlich hinsichtlich von mehreren Fernbedienungen zu holen. Sie haben ähnliche Syntax und Argumente, obwohl git fetch
kürzer ist, soMenschen wahrscheinlich finden es einfacher, zu geben und zu verwenden.
Es kann der Fall sein, dass git remote update
kann nicht verwendet werden, nur eine einzige Fernbedienung zu holen wie mit git fetch
, aber wie ich darauf hingewiesen habe, wird die Dokumentation nicht macht dies deutlich.
neben
Die Vervielfältigung in Funktionalität zwischen Git Porzellan Befehlen, am Beispiel von git fetch
und git remote update
oben, ist nicht eindeutig. Ich habe eine ähnliche Situation mit git rebase --onto
und git cherry-pick
, dass sowohl eine Reihe von Commits nimmt Patch auf eine neue Basis zu begehen.
Ich denke, das als Git im Laufe der Jahre entwickelt hat, war einige Funktionen (unvermeidlich?) Dupliziert, vielleicht manchmal als Service für Endanwender (zum Beispiel, dann ist es einfacher, einen Bereich passieren zu cherry-pick
, als eine einzelne passieren commit über und über einen Bereich zu holen). Offenbar hat cherry-pick
nicht immer eine Reihe von Commits akzeptieren, wie sie in der v1.7.2 Release notes :
git cherry-pick
lernte eine Reihe von Commits zu holen (zcherry-pick A..B
undcherry-pick --stdin
), sogit revert
tat; diese nicht unterstützen, die schönere Ablaufsteuerungrebase [-i]
hat, though.
Andere Tipps
Ja und nein. git remote update
holt aus allen Fernbedienungen, nicht nur eine.
auf dem Code Ohne einen Blick zu sehen, ob remote update
nur ein Shell-Skript ist (möglich) es, im Grunde läuft für jeden entfernten holen. git fetch
kann viel mehr granular sein.