Il est important de comparer la philosophie de conception de git à celle d'un outil de contrôle de source plus traditionnel comme SVN.
Subversion a été conçu et réalisé selon un modèle client/serveur. Il y a un dépôt unique qui est le serveur, et plusieurs clients peuvent récupérer du code sur le serveur, travailler dessus, puis le renvoyer au serveur. L'hypothèse est que le client peut toujours contacter le serveur lorsqu'il a besoin d'effectuer une opération.
Git a été conçu pour supporter un modèle plus distribué, sans avoir besoin d'un dépôt central (bien que vous puissiez en utiliser un si vous le souhaitez). Git a également été conçu pour que le client et le "serveur" n'aient pas besoin d'être en ligne en même temps. Git a été conçu pour que des personnes sur un lien peu fiable puissent échanger du code par courrier électronique, même. Il est possible de travailler complètement déconnecté et de graver un CD pour échanger du code via git.
Afin de supporter ce modèle, git maintient un dépôt local avec votre code ainsi qu'un dépôt local supplémentaire qui reflète l'état du dépôt distant. En gardant une copie du dépôt distant localement, git peut déterminer les changements nécessaires même si le dépôt distant n'est pas accessible. Plus tard, lorsque vous devez envoyer les modifications à quelqu'un d'autre, git peut les transférer comme un ensemble de modifications à partir d'un point dans le temps connu du dépôt distant.
Normalement git pull
Pour ce faire, il effectue une git fetch
pour mettre à jour la copie locale du dépôt distant, puis fusionner les modifications dans votre propre dépôt de code et éventuellement dans votre copie de travail.
Il faut donc garder à l'esprit qu'il y a souvent au moins trois exemplaires d'un projet sur votre poste de travail. Une copie est votre propre dépôt avec votre propre historique de livraisons. La seconde copie est votre copie de travail où vous éditez et construisez. La troisième copie est votre copie locale "en cache" d'un dépôt distant.
392 votes
J'ai trouvé cet article bien écrit sur git fetch et git pull qui vaut la peine d'être lu : longair.net/blog/2009/04/16/git-fetch-and-merge
59 votes
Notre approche alternative est devenue
git fetch; git reset --hard origin/master
dans le cadre de notre flux de travail. Il efface les modifications locales, vous maintient à jour avec le master MAIS veille à ce que vous n'introduisiez pas de nouvelles modifications par-dessus les modifications actuelles et que vous ne fassiez pas n'importe quoi. Nous l'utilisons depuis un certain temps et il nous semble beaucoup plus sûr en pratique. Assurez-vous simplement d'ajouter/commiter/stocker tout travail en cours d'abord !32 votes
Assurez-vous de savoir comment utiliser correctement git stash. Si vous posez des questions sur 'pull' et 'fetch', alors peut-être que 'stash' a aussi besoin d'être expliqué...
43 votes
Beaucoup de personnes venant de Mercurial utilisent "git pull", pensant qu'il s'agit d'un équivalent de "hg pull". Ce qui n'est pas le cas. L'équivalent de "hg pull" dans Git est "git fetch".
12 votes
La commande git fetch récupère le code mis à jour avec la branche et récupère également les branches nouvellement ajoutées dans votre local, la commande git pull récupère uniquement le code mis à jour de la branche actuelle