Qual è la differenza tra git clone e checkout?


Risposte:


337

La pagina man per il checkout: http://git-scm.com/docs/git-checkout

La pagina man per il clone: http://git-scm.com/docs/git-clone

Per riassumere, il clone serve per recuperare i repository che non hai, il checkout serve per passare da una filiale all'altra in un repository che hai già.

Nota: per coloro che hanno un background SVN / CVS e non conoscono Git, l'equivalente di git clonein SVN / CVS è checkout. La stessa formulazione di termini diversi è spesso confusa.


41
checkoutpuò essere utilizzato anche per altre cose, come sovrascrivere un file nella copia di lavoro con una versione di quel file da un'altra revisione.
svick

8
e quando usi "pull" vs "checkout"?
Kokodoko,

27
pull è un fetch plus merge, il checkout è un'operazione locale che opera solo su dati già recuperati. Quindi non è affatto come svn checkout.
August Lilleaas,

13
Venendo dal mondo SVN, ero anche confuso. Wow .. che casino. In un mondo ideale imporrei a tutti i produttori di sistemi di controllo del codice sorgente di utilizzare gli stessi termini.
Zoltán Tamási,

5
Fork è un termine github e non è correlato a git stesso.
August Lilleaas,

123

git clone è quello di recuperare i tuoi repository dal server git remoto.

git checkout è quello di verificare lo stato desiderato del repository (come rami o file particolari).

Ad esempio, sei attualmente nel ramo principale e vuoi passare al ramo di sviluppo.

git checkout develop_branch

Ad esempio, si desidera effettuare il checkout a un determinato stato di un determinato file

git checkout commit_point_A -- <filename>

Ecco un buon riferimento per imparare Git, ti fa capire molto più facilmente.


20
"dal server remoto git" - non è necessario che il server sia remoto. git clonefunzionerà anche con repository locali.
SET

1
Grazie per il link ad un riferimento visivo a git!
David Pointer,

@Kit Ho: Il link va bene come riferimento, ma non è di grande aiuto per qualcuno con domande di base su Git come la persona sopra. Come dice l'articolo stesso, "Una volta che sai un po 'su come funziona git, questo sito potrebbe consolidare la tua comprensione"
SN

Le definizioni circolari non sono così utili. La parola "fetch" usata per descrivere il clone è utile e aggiunge significato, ma la frase "checkout è checkout ..." non aggiunge significato, né aiuta effettivamente a distinguere la differenza tra le due operazioni.
C Perkins,

11

Una cosa da notare è la mancanza di qualsiasi "Copyout" all'interno di git. Questo perché hai già una copia completa nel tuo repository locale - il tuo repository locale è uno clonedei repository upstream scelti. Quindi hai effettivamente un personale checkoutdi tutto , senza mettere un po 'di "blocco" su quei file nel repository di riferimento.

Git fornisce i valori hash SHA1 come meccanismo per verificare che la copia che hai di un file / albero delle directory / commit / repo sia esattamente uguale a quella usata da chiunque sia in grado di dichiarare le cose come "Master" all'interno della gerarchia della fiducia. Questo evita tutti quei "blocchi" che causano il soffocamento della maggior parte dei sistemi SCM (con i soliti problemi di copie private, grandi fusioni e nessun reale controllo o gestione del codice sorgente ;-)!


4
La domanda non menziona i blocchi e in questi giorni si dovrebbe presumere che una persona non abbia familiarità con questo concetto, quindi queste differenze rispetto ai vecchi VCS dovrebbero essere spiegate solo se poste esplicitamente.
marzo

6

Semplicemente git checkout ha 2 usi

  1. Passaggio tra filiali locali esistenti come git checkout <existing_local_branch_name>
  2. Crea un nuovo ramo dal ramo corrente usando flag -b. Supponiamo che se sei nel ramo principale git checkout -b <new_feature_branch_name>, creerai un nuovo ramo con i contenuti del master e passerai al ramo appena creato

Puoi trovare più opzioni sul sito ufficiale


Bello. Questa -bopzione è fantastica che crea un nuovo ramo locale e lo verifica allo stesso tempo con un singolo comando. Lo amo!
RBT

2

checkout può essere utilizzato per molti casi:

1o caso : passare da un ramo all'altro nel repository locale Ad esempio: git checkout exists_branch_to_switch

Puoi anche creare un nuovo ramo e passare a questo caso con -b

git checkout -b new_branch_to_switch

2 ° caso : ripristinare il file da x rev

git checkout rev file_to_restore ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.