2010-11-05 12 views
23

Nach dem Einrichten eines Repos auf Github scheint es zwei Möglichkeiten zu geben, dieses Repo in ein lokales Repo zu ziehen.Was ist der Unterschied zwischen clone und mkdir-> cd-> init-> remote-add-> pull?

Erstens konnte ich ein Verzeichnis erstellen, ein leeres Repo initialisieren, eine Fernbedienung hinzufügen und dann Änderungen von der Fernbedienung ziehen.

> mkdir "exampleProject" 
> cd "exampleProject" 
> git init 
> git remote add origin [email protected]:exampleUser/exampleProject.git 
> git pull origin master 

Zweitens könnte ich die Fernbedienung klonen.

Ist das Klonen nur eine Abkürzung für die 5-Stufen-Version oder macht es sonst noch etwas? Werde ich in Schwierigkeiten geraten, wenn ich eine Methode gegenüber der anderen verwende?

+0

Ich bin mir ziemlich sicher, dass es das gleiche ist. Beide erstellen eine Kopie von Repo. – Andrey

Antwort

25

Viele Befehle, ob Git-Befehle oder allgemeine Programme, tun Dinge in einer Zeile, die Sie sonst in zehn tun könnten. Es ist immer gut, Arbeit zu sparen!

Das heißt, Ihre Schritte sind in der Nähe, aber nicht ganz das gleiche wie, was git clone tut. Ich kann von ein paar Unterschiede denken, alle mit Niederlassungen zu tun:

  • Wenn aus irgendeinem Grund, HEAD der Fernbedienung des ist nicht Meister, der Klon wird das Richtige tun - geben Sie einen Zweig namens der wie die Fernbedienung, anstatt Master. Dies ist selten, aber ein gutes Detail, auf das Sie achten sollten.

  • Ihre git pull erstellt keine Remote-Verzweigungen. Wenn die Remote-Station mehrere Zweige hat, erstellt der Klon Remote-Zweigstellen remotes/origin/foo, remotes/origin/bar, ... in Ihrem Repository. A git fetch origin würde das in Ihren aufgeführten Schritten erledigen.

  • Sie haben Ihren Master-Zweig auch nicht so eingerichtet, dass er die Herkunft des Klons verfolgt. Sie können dies zu Ihren aufgeführten Schritten als git config branch.master.remote origin; git config branch.master.merge refs/heads/master hinzufügen. Das ist sehr wichtig - mit Ihren Schritten, wenn Sie Master ausgecheckt haben und Sie Git Pull eingeben, wird es nicht wissen, was zu tun ist.

Es ist möglich, dass ich etwas verpasst habe.

  • Es ist kurz: Wie bei Schwierigkeiten eine oder andere Weise, selbst wenn Sie alle Unterschiede zwischen einem Standard-Klon ausbügeln und einem „Handbuch Klon“, mein Rat wäre, nicht git clone neu zu erfinden werden. Warum mehr Arbeit?

  • Es hat praktische Optionen, um sein Verhalten zu ändern. Dinge wie --shared wären sehr schwer zu den aufgeführten Befehlen hinzuzufügen.

  • Es ist garantiert, das Richtige jetzt und in Zukunft zu tun. Was ist, wenn Sie ein Detail verpasst haben, wie oben? Was ist, wenn git einen globalen Konfigurationsparameter hinzugefügt hat, der die Klone beeinflusst hat? Sie müssten Ihre Befehle ändern, um sie zu berücksichtigen, aber git clone würde es bereits wissen.

+1

Danke für Ihre Antwort! Es war sehr hilfreich. Mein Grund zu fragen ist nicht, weil ich Clone neu erfinden möchte, sondern um genau zu verstehen, was es tut, aber Ihr Rat ist sehr gültig. –

+0

@Rupert: Ah, cool.Ich denke, es war die Tatsache, dass Sie zuerst die manuelle Methode aufgelistet haben, die mich glauben ließ, Sie würden es in Erwägung ziehen. – Cascabel

+0

@Jefromi: Eine andere Möglichkeit, was Sie mit diesen beiden 'git config' Befehlen machen, ist:' git branch --set-upstream Masterursprung/master' Dies fügt den gleichen '[branch" master "] Abschnitt hinzu die '.git/config' Datei. Es ist wie 'git branch - track master origin/master', außer dass Sie es verwenden, wenn der Master-Zweig bereits lokal existiert. – bjnord