Quelle est la différence entre git clone et checkout?

Réponses:

337

La page de manuel pour le paiement: http://git-scm.com/docs/git-checkout

La page de manuel pour clone: http://git-scm.com/docs/git-clone

Pour résumer, le clone sert à récupérer des référentiels que vous n'avez pas, le checkout sert à basculer entre les branches d'un référentiel que vous avez déjà.

Remarque: pour ceux qui ont un arrière-plan SVN / CVS et qui sont nouveaux dans Git, l'équivalent de git cloneSVN / CVS est checkout. La même formulation de termes différents prête souvent à confusion.

August Lilleaas
la source
41
checkoutpeut également être utilisé pour d'autres choses, comme remplacer un fichier dans votre copie de travail par une version de ce fichier d'une autre révision.
svick
8
et quand utilisez-vous "pull" vs "checkout"?
Kokodoko
27
pull est une extraction plus une fusion, checkout est une opération locale qui ne fonctionne que sur des données déjà extraites. Ce n'est donc pas du tout comme la commande svn.
August Lilleaas
13
Venant du monde SVN, j'étais également confus. Wow .. quel gâchis. Dans un monde idéal, j'obligerais chaque fabricant de système de contrôle de source à utiliser les mêmes termes.
Zoltán Tamási
5
Fork est un terme github et n'est pas lié à git lui-même.
August Lilleaas,
123

git clone consiste à récupérer vos référentiels depuis le serveur git distant.

git checkout consiste à extraire l'état souhaité de votre référentiel (comme des branches ou des fichiers particuliers).

Par exemple, vous êtes actuellement sur la branche master et vous souhaitez passer en branche develop.

git checkout develop_branch

Par exemple, vous souhaitez passer à un statut particulier d'un fichier particulier

git checkout commit_point_A -- <filename>

Voici une bonne référence pour apprendre Git, vous permet de comprendre beaucoup plus facilement.

Kit Ho
la source
20
"depuis le serveur git distant" - il n'est pas nécessaire que le serveur soit distant. git clonefonctionnera également avec les dépôts locaux.
SET
1
Merci pour le lien vers une référence visuelle à git!
David Pointer
@Kit Ho: Le lien est bien comme référence, mais ce n'est pas beaucoup d'aide pour quelqu'un avec des questions de base sur git comme la personne ci-dessus. Comme le dit l'article lui-même, "Une fois que vous en saurez un peu sur le fonctionnement de git, ce site peut renforcer votre compréhension"
SN
Les définitions circulaires ne sont pas si utiles. Le mot "fetch" utilisé pour décrire le clone est utile et ajoute du sens, mais l'expression "checkout is to checkout ..." n'ajoute pas de sens et n'aide pas non plus à distinguer la différence entre les deux opérations.
C Perkins
11

Une chose à noter est le manque de "Copyout" dans git. C'est parce que vous avez déjà une copie complète dans votre référentiel local - votre référentiel local étant un clonede votre référentiel en amont choisi. Ainsi, vous avez effectivement un personnel checkoutde tout , sans mettre de «verrou» sur ces fichiers dans le référentiel de référence.

Git fournit les valeurs de hachage SHA1 comme mécanisme pour vérifier que la copie que vous avez d'un fichier / arborescence de répertoires / commit / repo est exactement la même que celle utilisée par quiconque est capable de déclarer des choses comme "Master" dans la hiérarchie de confiance. Cela évite tous ces «verrous» qui provoquent l'étouffement de la plupart des systèmes SCM (avec les problèmes habituels de copie privée, de grosses fusions, et aucun contrôle ou gestion réel du code source ;-)!

Philip Oakley
la source
4
La question ne mentionne pas les verrous et il devrait être supposé par défaut de nos jours qu'une personne n'est pas familière avec ce concept, donc ces différences par rapport aux anciens VCS ne doivent être expliquées que si elles sont posées explicitement.
wRAR
6

Git checkout a 2 utilisations

  1. Basculer entre les succursales locales existantes comme git checkout <existing_local_branch_name>
  2. Créez une nouvelle branche à partir de la branche actuelle en utilisant l'indicateur -b. Supposons que si vous êtes à la branche principale git checkout -b <new_feature_branch_name>, vous créerez une nouvelle branche avec le contenu du maître et passerez à la branche nouvellement créée

Vous pouvez trouver plus d'options sur le site officiel

Khader MA
la source
Agréable. Cette -boption est géniale qui crée une nouvelle branche locale et la vérifie également en même temps dans une seule commande. J'ai adoré!
RBT
2

checkout peut être utilisé pour de nombreux cas:

1er cas : basculer entre les branches dans le référentiel local Par exemple: git checkout exists_branch_to_switch

Vous pouvez également créer une nouvelle branche et passer dans ce cas avec -b

git checkout -b new_branch_to_switch

2ème cas : restaurer le fichier à partir de x rev

git checkout rev file_to_restore ...

Goms
la source