Es ist wichtig, die Designphilosophie von Git mit der Philosophie eines traditionelleren Versionskontrollwerkzeugs wie SVN zu vergleichen.
Subversion wurde mit einem Client/Server-Modell entwickelt und gebaut. Es gibt ein einziges Repository, das den Server darstellt, und mehrere Clients können Code vom Server abrufen, daran arbeiten und ihn dann an den Server zurückgeben. Es wird davon ausgegangen, dass der Client immer den Server kontaktieren kann, wenn er eine Operation durchführen muss.
Git wurde entwickelt, um ein eher verteiltes Modell zu unterstützen, bei dem kein zentrales Repository benötigt wird (obwohl Sie natürlich eines verwenden können, wenn Sie möchten). Außerdem wurde Git so konzipiert, dass der Client und der "Server" nicht zur gleichen Zeit online sein müssen. Git wurde so konzipiert, dass Leute mit einer unzuverlässigen Verbindung Code sogar per E-Mail austauschen können. Es ist möglich, völlig unverbunden zu arbeiten und eine CD zu brennen, um Code über Git auszutauschen.
Um dieses Modell zu unterstützen, verwaltet Git ein lokales Repository mit Ihrem Code und ein zusätzliches lokales Repository, das den Zustand des entfernten Repositorys widerspiegelt. Indem eine Kopie des entfernten Repositorys lokal gehalten wird, kann Git die erforderlichen Änderungen auch dann ermitteln, wenn das entfernte Repository nicht erreichbar ist. Wenn Sie die Änderungen später an eine andere Person senden müssen, kann Git sie als eine Reihe von Änderungen von einem Zeitpunkt aus übertragen, der dem entfernten Repository bekannt ist.
-
git fetch
ist der Befehl, der sagt: "Bringe meine lokale Kopie des entfernten Repositorys auf den neuesten Stand".
-
git pull
sagt: "Bringe die Änderungen im entfernten Repository dorthin, wo ich meinen eigenen Code aufbewahre."
Normalerweise git pull
tut dies, indem es eine git fetch
um die lokale Kopie des entfernten Repositorys auf den neuesten Stand zu bringen, und dann die Änderungen in Ihr eigenes Code-Repository und möglicherweise Ihre Arbeitskopie einzubinden.
Es gilt zu bedenken, dass es oft mindestens eine drei Exemplare eines Projekts auf Ihrer Workstation. Eine Kopie ist Ihr eigenes Repository mit Ihrer eigenen Commit-Historie. Die zweite Kopie ist Ihre Arbeitskopie, in der Sie das Projekt bearbeiten und erstellen. Die dritte Kopie ist Ihre lokale "gecachte" Kopie eines entfernten Repositorys.
439 Stimmen
Ich habe diesen gut geschriebenen Artikel über git fetch und git pull gefunden, der es wert ist, gelesen zu werden: longair.net/blog/2009/04/16/git-fetch-and-merge
70 Stimmen
Unser alternativer Ansatz hat sich
git fetch; git reset --hard origin/master
als Teil unseres Arbeitsablaufs. Es blendet lokale Änderungen aus, hält Sie mit dem Master auf dem Laufenden, stellt aber sicher, dass Sie nicht einfach neue Änderungen über die aktuellen Änderungen ziehen und ein Durcheinander verursachen. Wir verwenden es schon eine Weile und es fühlt sich in der Praxis viel sicherer an. Stellen Sie nur sicher, dass Sie alle laufenden Arbeiten zuerst hinzufügen/übertragen/verstecken!40 Stimmen
Vergewissern Sie sich, dass Sie wissen, wie man git stash richtig verwendet. Wenn du nach "pull" und "fetch" fragst, dann ist vielleicht auch "stash" erklärungsbedürftig...
49 Stimmen
Viele Leute, die von Mercurial kommen, benutzen "git pull", weil sie denken, es sei ein Äquivalent für "hg pull". Das ist es aber nicht. Git's Äquivalent zu "hg pull" ist "git fetch".
0 Stimmen
Ein sehr gut geschriebener Artikel über git pull vs fetch freecodecamp.org/news/git-fetch-vs-pull
1 Stimmen
Git pull zieht aus einem entfernten Zweig und führt ihn zusammen. git fetch holt nur aus dem entfernten Zweig, führt ihn aber nicht zusammen.
0 Stimmen
Kurze Antwort | git fetch - Sie können die Dateien einsehen, die nach Ihrem letzten Pull übertragen wurden, ohne diese Codes zusammenzuführen. | git pull - Holen Sie sich die Änderungen an Ihrer Codebasis. Es erfolgt ein automatisches Zusammenführen mit Ihrer Codebasis.