Was ist der Unterschied zwischen Pull und Clone in Git?


237

Was ist der Unterschied zwischen (nach mkdir repound cd repo):

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

und

git clone git://github.com/cmcculloh/repo.git

Ich meine, offensichtlich ist einer kürzer, aber abgesehen davon machen sie im Grunde das Gleiche?

Antworten:


122

Sie sind im Grunde die gleichen, außer dass der Klon zusätzliche Remote-Tracking-Zweige einrichtet, nicht nur den Master. Schauen Sie sich die Manpage an :

Klont ein Repository in ein neu erstelltes Verzeichnis, erstellt Fernverfolgungszweige für jeden Zweig im geklonten Repository (sichtbar mit git branch -r) und erstellt und checkt einen anfänglichen Zweig aus, der aus dem derzeit aktiven Zweig des geklonten Repositorys gegabelt wird.


10
git fetch --all richtet zusätzliche Remote-Tracking-Zweige ein, sodass diese im Grunde genommen identisch sind.
cmcculloh

251

git cloneAuf diese Weise erhalten Sie eine lokale Kopie eines vorhandenen Repositorys, an dem Sie arbeiten können. Es wird normalerweise nur einmal für ein bestimmtes Repository verwendet, es sei denn, Sie möchten mehrere Arbeitskopien davon haben. (Oder möchten Sie eine saubere Kopie erhalten, nachdem Sie Ihre lokale durcheinander gebracht haben ...)

git pull(oder git fetch+ git merge) ist, wie Sie diese lokale Kopie mit neuen Commits aus dem Remote-Repository aktualisieren . Wenn Sie mit anderen zusammenarbeiten, ist dies ein Befehl, den Sie häufig ausführen.

Wie Ihr erstes Beispiel zeigt, ist es möglich, git clonemit einer Auswahl anderer Git-Befehle zu emulieren , aber es ist nicht wirklich der Fall, dass git pull"im Grunde das Gleiche" wie git clone(oder umgekehrt) getan wird .


4
Was genau macht der Git-Klon, was nicht durch die Folge von Befehlen erreicht wird, die "Git Pull" beinhalten?
cmcculloh

21
@cmcculloh: Nichts - die Sequenz, die Sie beschreiben, erreicht effektiv das, was "Git-Klon" tut. Der Punkt ist, dass "git pull" verwendet wird, um eine Vielzahl von Dingen zu tun, die über das hinausgehen, was Sie dort getan haben - ganz zu schweigen davon, dass "git pull" tatsächlich genau die Kombination aus "git fetch; git merge <aktueller Zweig> <origin /" ist. aktueller Zweig> ". IOW, du könntest ohne Klon leben und ziehen, wenn du es wirklich wolltest. Außerdem können Sie aus anderen Repositorys als dem, aus dem Sie geklont haben, ziehen. Ich stelle mir 'Klon' gerne als "mache mir eine lokale Kopie dieses Repos" vor und 'ziehe' als "hol mir die Updates von einer bestimmten Fernbedienung".
ebneter

120

In der Sprache der Laien können wir sagen:

  • Klonen : Holen Sie sich eine Arbeitskopie des Remote-Repositorys.
  • Pull : Ich arbeite daran. Bitte besorgen Sie mir die neuen Änderungen, die möglicherweise von anderen aktualisiert werden.

3
Ich denke, Ihre Pull- Definition kann auch für Clone
Henrywright

10
Wie können Sie an etwas arbeiten, das Sie nicht geklont haben?
Jyoti Prakash

Ich verstehe nicht was du meinst?
Henrywright

@henrywright hoffe, die Antwort von ebneter wird Ihre Frage beantworten
Mrk

41

git clone bedeutet, dass Sie eine Kopie des Repositorys in Ihrem System erstellen.

git fork bedeutet, dass Sie das Repository in Ihr Github-Konto kopieren.

git pull bedeutet, dass Sie das zuletzt geänderte Repository abrufen.

git push bedeutet, dass Sie das Repository nach dem Ändern zurückgeben.

In Laienbezeichnung:

git clonewird heruntergeladen und git pullaktualisiert.


9

Klon : Kopieren des Remote-Server-Repositorys auf Ihren lokalen Computer.

pull : Holen Sie sich neue Änderungen, die andere Ihrem lokalen Computer hinzugefügt haben.

Das ist der Unterschied.

Klon wird im Allgemeinen verwendet, um eine Remote-Repo-Kopie zu erhalten.

Pull wird verwendet, um den von anderen Teamkollegen hinzugefügten Code anzuzeigen, wenn Sie in Teams arbeiten.


5

Der Git-Klon wird verwendet, um nur genau das herunterzuladen, was gerade auf dem Remote-Server-Repository ausgeführt wird, und es im Ordner Ihres Computers zu speichern, in dem sich das Projekt befindet. Meistens wird es nur verwendet, wenn wir das Projekt zum ersten Mal hochladen. Danach ist das Ziehen die bessere Option.

Git Pull ist im Grunde eine (Klon (Download) + Merge) Operation und wird meistens verwendet, wenn Sie als Teamwork arbeiten. Mit anderen Worten, wenn Sie die letzten Änderungen in diesem Projekt wünschen, können Sie ziehen.


3

Miss Clone: ​​Ich bekomme eine neue Kopie an local.

Herr Pull: Ich habe es bereits vor Ort, ich aktualisiere es nur.


Miss Clone: ​​Ich kann tun, was Sie tun! Du bist nur meine Untergruppe.

Mr Pull: Das Gleiche!


Miss Clone: ​​Nein, Sie erstellen nicht. Das ist was ich mache:

  1. Erstellen Sie ein leeres nacktes Repository
  2. Füllen Sie Remote-Tracking-Zweige aus
  3. Führen Sie git fetch ohne Argumente aus

Du machst nur # 3 und dann verschmelzst du, was ich nicht tun muss (meins ist frisch).

Mr Pull: Kluge Hosen, keine große Sache, ich werde zuerst einen "Git Init" machen! Dann sind wir gleich. Außerdem habe ich die zusätzliche Zusammenführungsfunktion für vorhandene Repos! Was mich zum am häufigsten verwendeten Befehl in Git macht;)


Git-Ersteller: Halten Sie Ihre Pferde Mr Pull, wenn --bare oder --mirror mit Klon oder Init verwendet wird, wird Ihre Zusammenführung nicht stattfinden. Es bleibt schreibgeschützt.


Unterschätzte Antwort.
Sinuskonata

2

Hmm, was fehlt, um den Remote-Zweig "4.2" beim Ziehen zu sehen, wie beim Klonen? Etwas ist eindeutig nicht identisch.

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

vs.

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

Ich habe dies auch bemerkt und ich vermute, dass Änderungen der Git-Standardeinstellungen im Laufe der Zeit das Problem sind. Ich habe 1.9.5.msysgit unter Windows und 2.3.2-Applegit-55 auf einem Mac.
AnneTheAgile

2

git clone URL ---> Das vollständige Projekt oder Repository wird als separates Verzeichnis heruntergeladen. und nicht nur die Änderungen git pull URL ---> fetch + merge -> Es werden nur die vorgenommenen Änderungen abgerufen und nicht das gesamte Projekt


1

Während der git fetchBefehl alle Änderungen auf dem Server abruft, die Sie noch nicht haben, ändert er Ihr Arbeitsverzeichnis überhaupt nicht. Es werden einfach die Daten für Sie abgerufen und Sie können sie selbst zusammenführen. Es wird jedoch ein Befehl aufgerufen, auf git pullden in den meisten Fällen im Wesentlichen git fetchunmittelbar ein folgt git merge.

Lesen Sie mehr: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


1
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Ekad

0

Klonen -: Es wird genau eine Kopie Ihres Remote-Repository-Projekts auf Ihrem lokalen Computer erstellt.

Pull -: Angenommen, zwei oder mehr Personen teilen sich dasselbe Repository. (Angenommen, ein anderer Personenname ist Syam.) (Ein Repository ist ein Ort, an dem Ihr Projekt in Github vorhanden ist.) Wenn Syam also einige Änderungen an demselben Projekt in seinem lokalen Projekt vornimmt und es in das Remote-Repository überträgt. Unabhängig von den Änderungen, die Syam vorgenommen hat, werden diese Änderungen vorgenommen nicht in Ihrem lokalen reflektieren. Um diese neuen Änderungen in Ihrer Region widerzuspiegeln, müssen Sie Git Pull verwenden. Insgesamt verwenden wir Git Pull, um das Projekt zu aktualisieren.

Grundsätzlich verwenden wir den Git-Klon nur einmal, während wir den Git-Pull oft verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.