Quelle est la différence entre git push et git pull?

Je viens de tomber sur quelque chose de particulier aujourd'hui. J'ai demandé à un collègue de mon travail d'été de m'aider à mettre en place un nouveau repo Git distant pour mon code et il y avait beaucoup de confusion sur ce qu'il a fait et ce que je voulais faire. Je lui ai demandé d'envoyer sa configuration pour pouvoir voir le chemin de sa télécommande et j'ai découvert qu'il n'avait pas de télécommande. Quand je lui ai demandé à ce sujet, il a expliqué son flux de travail comme ceci:

  1. changer quelque chose localement
  2. Commettre
  3. Déplacer vers distant dir
  4. git pull c:localdir

Donc, au lieu de pousser vers une télécommande, il a constamment tiré de son repo local vers celui de notre serveur. Type de travail à l'envers. Quand je l'ai confronté à ce sujet, il m'a demandé quelle était la différence et je ne pouvais pas vraiment lui répondre, mais je pense qu'il y a quelque chose de bien?

Donc, ma question à vous tous est: Quelle est la différence en poussant vers une télécommande et en tirant d'une télécommande?

41
demandé sur Qw4z1 2012-06-28 12:23:44

4 réponses

Pousser vers une télécommande: envoyer des commits que vous avez à un autre repo git. Le repo git est considéré comme "distant", mais il peut s'agir d'un repo dans un autre dossier de votre disque dur. tirer à partir d'une télécommande: obtenez des commits à partir d'un repo distant et fusionnez-les dans votre tête actuelle (votre extraction actuelle de votre repo)

Votre collègue a peut-être utilisé pull au lieu de push car votre référentiel n'était peut-être pas disponible (Pas de démon Git en cours d'exécution, ou gitweb, ou serveur SSH activé), mais son disponible depuis votre ordinateur. Comme c'est un serveur, il pourrait ne pas vouloir exposer un git daemon/service qui pourrait être un vecteur d'attaque.

Mais si votre référentiel était partagé / disponible, il aurait juste pu faire:

  1. changer quelque chose localement
  2. commettre
  3. pousser vers votre référentiel
11
répondu Dolanor 2012-06-28 08:42:36

À mon avis, vous pouvez soit laisser les utilisateurs pousser leurs commits vers un référentiel considéré comme "le maître", soit les laisser envoyer des requêtes pull à un seul utilisateur autorisé à modifier ledit"maître".

Github, par exemple, ne laissera pas les non-contributeurs pousser vers le référentiel, mais leur permettra d'envoyer des requêtes pull, afin que les contributeurs puissent intégrer leurs modifications.

14
répondu Miquel 2012-06-28 08:43:55

None, les repos sont des copies les unes des autres et pull et push ne sont que des flux de direction. La différence avec la méthode de votre collègue est qu'il a ajouté une 4ème commande inutile.

2
répondu iain 2012-06-28 08:27:38

Oui, ça marche en arrière.

Le flux de travail principal est:

  1. changer quelque chose localement
  2. commettre
  3. pousser vers le répertoire distant

Un cas d'utilisation (un autre est expliqué par Dolanor ) pour ne pas pousser à distance est qu'une copie de travail est extraite sur la télécommande (c'est-à-dire que ce n'est pas un repo nu). Quand il veut pousser une branche qui est extraite sur la boîte distante (par exemple master:master), cela ne réussira pas puisque les pousses vers les branches extraites sont interdit.

À mon avis, c'est le seul cas d'utilisation pour sauter sur la machine distante et tirer au lieu de pousser de la machine locale.

1
répondu eckes 2017-05-23 10:31:06