2010-11-05 15 views
23

Dopo aver impostato un repository su Github, sembrano esserci due modi per trasferire il repository in un repository locale.Qual è la differenza tra clone e mkdir-> cd-> init-> remote-add-> pull?

In primo luogo, potrei creare una directory, inizializzare un repository vuoto, aggiungere un telecomando e quindi estrarre le modifiche dal telecomando.

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

In secondo luogo, potrei clonare il telecomando.

> git clone [email protected]:exampleUser/exampleProject.git 

La clonazione è solo una scorciatoia per la versione a 5 passaggi o fa anche qualcos'altro? Mi imbatterò in difficoltà se utilizzo un metodo rispetto all'altro?

+0

sono quasi sicuro che sia lo stesso. entrambi creano una copia del repository. – Andrey

risposta

25

Un sacco di comandi, che siano comandi git o programmi comuni, fanno cose in una riga che altrimenti potreste fare in dieci. È sempre bene salvare il lavoro!

Detto questo, i passaggi sono simili ma non del tutto identici a ciò che fa git clone. Mi vengono in mente alcune differenze, tutto a che fare con i rami:

  • Se, per qualche ragione, la testa del telecomando è non padrone, il clone farà la cosa giusta - si invia un ramo chiamato il lo stesso del telecomando, invece del master. Questo è raro, ma un buon dettaglio di cui essere a conoscenza.

  • Il tuo git pull non creerà alcun ramo remoto. Se il telecomando ha più filiali, il clone crea filiali remote remotes/origin/foo, remotes/origin/bar, ... nel repository. A git fetch origin si prenderà cura di questo nei passaggi elencati.

  • Inoltre non è stato impostato il ramo master per tenere traccia delle origini, come fa il clone. È possibile aggiungere questo ai passaggi elencati come git config branch.master.remote origin; git config branch.master.merge refs/heads/master. Questo è molto significativo: con i tuoi passi, se hai il master estratto e scrivi git pull, non saprà cosa fare.

È possibile che mi sia sfuggita una cosa o due. Per quanto riguarda le difficoltà in un modo o l'altro, anche supponendo che si appianare tutte le differenze tra un clone di default e un "clone manuale", il mio consiglio è di non reinventare git clone:

  • E 'breve. Perché fare di più?

  • Ha delle comode opzioni per cambiare il suo comportamento. Cose come --shared sarebbero davvero difficili da aggiungere ai tuoi comandi elencati.

  • È garantito fare la cosa giusta ora e in futuro. Che cosa succede se hai perso un dettaglio, come quelli sopra? Cosa succede se git ha aggiunto un parametro di configurazione globale che ha colpito i cloni? Dovresti modificare i tuoi comandi per tenerne conto, ma Git Clone lo saprebbe già.

+1

Grazie per la tua risposta! È stato molto utile Il motivo per cui lo chiedo non è perché voglio reinventare il clone, ma piuttosto capire esattamente cosa sta facendo, ma il tuo consiglio è molto valido. –

+0

@Rupert: Ah, bello.Penso che sia stato il fatto che hai elencato per primo il metodo manuale che mi ha fatto pensare che stavi pensando di usarlo. – Cascabel

+0

@Jefromi: Un altro modo per fare quello che stai facendo con questi due comandi 'git config' è:' git branch --set-upstream master origin/master' che aggiunge la stessa sezione '[branch" master "]' a il file '.git/config'. È come 'git branch --track master origin/master' eccetto che tu lo usi quando il ramo master esiste già localmente. – bjnord

Problemi correlati