Pourquoi une git 'pull request' n'est-elle pas appelée 'push request'?

451

La terminologie utilisée pour fusionner une branche avec un référentiel officiel est une «pull request». C'est déroutant, car il semble que je demande de pousser mes modifications dans le référentiel officiel.

Pourquoi est-il appelé une demande de tirage et non une demande de push?

Alejandro Sanz Díaz
la source
45
Imaginez un grand arbre vivant. L'arbre est trop solide pour que vous poussiez une branche dedans, au lieu de cela, vous devez demander à l'arbre de tirer une branche dans le tronc, la renforçant.
Luke
2
Si vous utilisez un référentiel distant comme gitihub, l'une des dernières commandes que le responsable exécutera pour répondre à la demande via la ligne de commande est git push. Pour moi, cela dit tout ... (oui, ils peuvent émettre git pull, puis git push, mais le push a été demandé et c'est ce qui est finalement fait)
ebyrob
62
GitLab les appelle merge requests. Beaucoup plus clair, à mon humble avis. :)
U007D
1
duplicate: stackoverflow.com/questions/14817051/…
Timothy Swan

Réponses:

377

Si vous avez un changement de code dans votre référentiel et que vous souhaitez le déplacer vers un référentiel cible, alors:

  • "Pousser", c'est forcer les modifications présentes dans le référentiel cible ( git push).
  • "Pull" est le référentiel cible saisissant vos modifications pour y être présent (à git pullpartir de l'autre référentiel).

Une «pull request» est que vous demandez au référentiel cible de récupérer vos modifications.

Une «demande push» serait le référentiel cible vous demandant de pousser vos modifications.

Sven
la source
21
cela a été un problème pour moi aussi avec la convention de dénomination: D & u vient de le rendre beaucoup plus simple à comprendre. y penser de la même manière que fonctionnent les achats / ventes de devises dans les banques.
nsuinteger
Je pense que vous devez redéfinir votre définition de "Pull", car il y a confusion sur "référentiel cible", "vos changements". Peut-être voulez-vous dire que "votre référentiel saisit les modifications du référentiel cible"?
MrPisarik
9
L'idée clé est que la terminologie «push» / «pull» est utilisée pour identifier la partie qui décide finalement si le transfert a lieu, et non la partie qui crée les informations transférées.
Jess Riedel
3
Cela dépend de qui demandez-vous, si c'est votre équipe, une "demande push" a plus de sens, si c'est le référentiel distant, vous avez absolument raison.
A77
2
Lorsque vous travaillez avec un serveur Git privé et central dans une entreprise, vous pouvez généralement y envoyer une nouvelle branche et demander une révision du code et la fusion de vos collègues. Donc, "pull request" pour ce flux de travail n'est pas techniquement correct, mais il s'est avéré que c'était le terme choisi par tout le monde et les concepteurs de l'interface graphique.
Sven
88

Lorsque vous envoyez une demande d'extraction, vous demandez (demandez) au propriétaire officiel du référentiel de retirer certaines modifications de votre propre référentiel. D'où "pull request".

JB Nizet
la source
2
mais le propriétaire émettra une fusion git après l'avoir approuvée
Jervie Vitriolo
2
Un git pull est un fetch et une fusion combinés, donc pull implique déjà une fusion.
Xiong Chiamiov
37

tl; dr puisque je ne suis pas autorisé à faire un push, je vais juste gentiment faire une demande au propriétaire du repo afin qu'ils décident de tirer


Qui peut envoyer du code vers un référentiel?

Si quelqu'un (peut-être mauvais ou sans instruction ou inconnu) pouvait venir dire ici, je viens de pousser cela dans votre branche principale et de foirer tout votre code HAHAHA! ?

Vous ne voulez sûrement pas qu'il fasse ça. Par défaut, un filet de sécurité est mis en place afin que personne ne puisse pousser à votre repo. Vous pouvez définir les autres comme collaborateurs , puis ils peuvent pousser. Vous accorderiez un tel accès à des personnes en qui vous avez confiance.

Donc, si vous n'êtes pas un collaborateur et essayez de pousser, vous obtiendrez une erreur indiquant que vous n'avez pas la permission.


Alors, comment les autres développeurs peuvent-ils pousser vers un référentiel qu'ils ne sont pas autorisés à pousser?
Vous ne pouvez pas donner accès à tout le monde, mais vous voulez donner aux autres un point de sortie / d'entrée afin qu'ils puissent faire «une demande au propriétaire du référentiel pour insérer ce code dans le référentiel». Autrement dit, en rendant le dépôt accessible, ils peuvent le bifurquer ... apporter leurs modifications dans leur propre fourchette. Poussez leurs modifications dans leur propre fork . Une fois dans leur propre dépôt à distance:

Ils font une demande de pull depuis leur fork et le propriétaire du référentiel en amont (vers lequel vous ne pouvez pas pousser directement) décidera de fusionner ou non la demande de pull.


Aussi une question semi-connexe que je recommande de lire Que se passe-t-il exactement dans un git push? Pourquoi un push git n'est-il pas considéré comme une fusion git?

Mon chéri
la source
4
pour les personnes qui ne réalisent pas qu'il y a une différence de permission entre pousser et tirer, cette réponse a beaucoup de sens.
copain
29

Pull Request: Je vous demande de tirer le mien.

hepidad
la source
7
En tant qu'utilisateur, je le vois de mon point de vue, ne devrait-il pas être "Je demande à vous le pousser?" I >>> You - Vous changez le point de référence deux fois dans le même contexte ... plutôt que I >>>> You <<<< Mine
Marin
1
Cette réponse est la plus logique.
shivams
Squeezy facile au citron
Ivan Ivković
Je vous demande de tirer le mien ..... d'où ??? Je comprends que ce serait d'une fourchette du projet original? ou à partir d'une copie locale?
KansaiRobot
5

Je veux pousser quelque chose au repo de quelqu'un d'autre.

Je n'ai pas la permission de pousser (ou de tirer, d'ailleurs).

Le propriétaire / collaborateurs a des autorisations. Ils peuvent tirer aussi bien que pousser. Je ne peux pas pousser.

Donc, je leur demande d'effectuer une traction de moi - ce qui signifie indirectement que je leur demande d'accepter ma poussée.

Donc, pas de demande de push. Seulement pour une traction. Et pour l'acceptation d'une poussée.

Par conséquent, une demande de «pull». Et pas une demande «push».

user11705414
la source
4

C'est le mot «demande» qui est clé dans ces actions. Vous pourriez aussi penser à cela comme disant "J'ai une demande pour vous de prendre mon travail, acceptez-vous?" - "A Pull Request".

C'est un peu déroutant au début, mais cela a finalement du sens.

Kyzer
la source
1

Pour mieux comprendre cela et vous en souvenir pour toujours, vous devez l'imaginer.

Imaginez un grand arbre vivant {comme votre référentiel}. L'arbre est trop solide pour que vous puissiez y insérer une branche ou y ajouter une nouvelle pièce {symbolise la création d'une nouvelle branche ou vous y insérez du code}, à la place vous devez demander à l'arbre de tirer une branche dans le tronc ou d'avoir le des changements de votre part.

Le terme «pull demandes» vient de la nature distribuée. Au lieu de simplement insérer vos modifications dans le référentiel (comme vous le feriez avec un référentiel centralisé, par exemple avec Subversion), vous publiez vos modifications séparément et demandez au responsable de récupérer vos modifications. Le responsable peut alors examiner les modifications et effectuer cette traction.

Donc, vous "demandez" essentiellement aux gars disposant d'un accès en écriture au dépôt auquel vous souhaitez contribuer, de "tirer" de votre dépôt.

Les requêtes Pull vous permettent de parler aux autres des modifications que vous avez apportées à une branche dans un référentiel sur GitHub. Une fois qu'une demande d'extraction est ouverte, vous pouvez discuter et examiner les modifications potentielles avec des collaborateurs et ajouter des validations de suivi avant que vos modifications ne soient fusionnées dans la branche de base. Explication de Github

SPidey
la source
0

Je pense que c'est une terminologie idiote parce que je veux penser que je veux vous POUSSER quelque chose et ne pas penser l'inverse en demandant à quelqu'un d'autre de retirer les ajouts. Par conséquent, il doit être changé en PUSH REQ. puisque je suis la partie active. La flèche va dans l'autre sens en commençant par moi et pas le Dingo à l'autre bout. A MON HUMBLE AVIS.

Michael Pauli
la source
0

Pensez de cette façon. Référentiel local vs référentiel distant.

  • Lorsque vous poussez du local. ( git push) - en d'autres termes, le référentiel distant tire des codes de vous (local).

Vous demandez quelque chose. Alors, demandez-vous,

  • Est - ce que vous voulez dépôt à distance Tirer les codes de vous? - Pull Request.
Jin Lim
la source
Je pense qu'il est important de faire la distinction que vous ne pouvez pas faire de requêtes push. Si vous pouvez pousser et que vous le faites, ce n'est pas une demande, il fusionnera avec le maître. Une demande d'extraction vers un référentiel git hub vous demande de fusionner votre code.
James
J'utilise juste cela comme exemple. Bien sûr, Github peut pousser le code. mais je vais modifier ma réponse.
Jin Lim
0

Je crains que la plupart de ces réponses ne répondent à la question Que signifie «tirer une demande»? ou Que signifierait «pousser la demande»? plutôt que la question du PO: pourquoi est-ce appelé une demande de tirage et non une demande de poussée?

Normalement, ce type de remplacement de question est acceptable, mais dans ce cas, il est clair que le PO connaît les réponses à ces questions de remplacement, donc y répondre n'est pas très utile.

Seuls les gens de GitHub qui ont inventé le terme le savent avec certitude. Cependant, il semble évident que ce choix terminologique reflète quelque chose comme le point de vue suivant concernant le phénomène des «changements entrant dans un référentiel de l'extérieur»: Le mainteneur fait l'action (pull) .

Cependant, une demande est également une action, et l'auteur de cette action n'est pas le responsable mais plutôt le demandeur (qui a fait encore plus d'action, à savoir le travail). Ainsi, le terme «pull request» crée une confusion quant à l'identité de l'agent . En fin de compte, la confusion est due à la nature récursive d'une demande: une demande est à la fois une action d'un agent principal et une demande d'une action future par un deuxième agent.

La situation est tout à fait analogue à des constructions linguistiques désormais courantes comme «nous avons construit notre maison» (utilisé à la place de «nous avons payé quelqu'un d'autre pour construire notre maison»), dans la mesure où la responsabilité de l'action principale est transférée de l'agent original évident à un agent secondaire remplissant un rôle social de gestion.

On pourrait en conclure que la raison du choix terminologique est la légitimation du point de vue selon lequel le travail de direction est un travail de première classe . En outre, la raison de la confusion concernant ce choix terminologique peut être que les travailleurs non cadres ont naturellement un point de vue différent.

jimmymathews
la source