Perché una "richiesta pull" di git non è chiamata "richiesta push"?


452

La terminologia utilizzata per unire una succursale con un repository ufficiale è una "richiesta pull". Questo è confuso, poiché sembra che io stia richiedendo di inviare le mie modifiche al repository ufficiale.

Perché si chiama una richiesta pull e non una richiesta push?


45
Immagina un grande albero vivente. L'albero è troppo robusto per spingerti dentro un ramo, invece devi chiedere all'albero di tirare un ramo nel tronco, rafforzandolo.
Luca,


2
Se si utilizza un repository remoto come gitihub, è uno degli ultimi comandi che il manutentore eseguirà per soddisfare la richiesta tramite riga di comando git push. Per me che dice tutto ... (sì, possono emettere git pull, quindi git push, ma la spinta è stata richiesta ed è quello che alla fine viene fatto)
ebyrob

62
GitLab li chiama merge requests. Molto più chiaro, IMHO. :)
U007D,

Risposte:


377

Se hai una modifica del codice nel tuo repository e vuoi spostarla in un repository di destinazione, allora:

  • "Push" sta forzando le modifiche presenti nel repository di destinazione ( git push).
  • "Pull" è il repository di destinazione che afferra le tue modifiche per essere presente lì ( git pulldall'altro repository).

Una "richiesta pull" sta richiedendo al repository di destinazione di afferrare le modifiche.

Una "richiesta push" sarebbe il repository di destinazione che richiede di inviare le modifiche.


21
questo è stato un problema anche per me con la convenzione di denominazione: D & u ha reso molto più semplice la comprensione. pensarla allo stesso modo in cui funziona la valuta di acquisto / vendita nelle banche.
nsuinteger,

Penso che tu debba ridefinire la tua definizione di "Pull", perché c'è confusione su "repository target", "le tue modifiche". Forse vuoi dire che "il tuo repository afferrando le modifiche dal repository di destinazione"?
MrPisarik,

9
L'idea chiave è che la terminologia "push" / "pull" viene utilizzata per identificare la parte che alla fine decide se il trasferimento avviene, non la parte che crea le informazioni da trasferire.
Jess Riedel,

3
Dipende da chi stai richiedendo, se è la tua squadra una "richiesta push" ha più senso, se è il repository remoto il tuo diritto.
A77,

2
Quando si lavora con un server Git centrale e privato in un'azienda, di solito si è in grado di inviare un nuovo ramo ad esso e richiedere una revisione del codice e unire i propri colleghi. Quindi "pull request" per questo flusso di lavoro non è tecnicamente corretto, ma si è rivelato essere il termine scelto da tutti e dai progettisti della GUI.
Sven

88

Quando si invia una richiesta pull, si sta chiedendo (richiedendo) al proprietario ufficiale del repository di estrarre alcune modifiche dal proprio repository. Da qui "richiesta pull".


2
ma il proprietario emetterà una fusione git dopo averla approvata
Jervie Vitriolo

2
Un git pull è un fetch e unire combinati, quindi pull implica già unire.
Xiong Chiamiov

37

tl; dr poiché non mi è permesso fare una spinta, farò semplicemente una richiesta al proprietario del repository in modo che decidano di tirare


Chi può inviare il codice a un repository?

Se qualcuno (possibilmente malvagio o non istruito o sconosciuto) fosse in grado di venire a dire qui, ho semplicemente inviato questo al tuo ramo principale e ho incasinato tutto il tuo codice HAHAHA!?

Sicuramente non vuoi che lo faccia. Per impostazione predefinita, viene impostata una rete di sicurezza in modo che nessuno possa spingere nel repository. È possibile impostare altri come collaboratore , poi si può spingere. Darebbe tale accesso alle persone di cui ti fidi.

Quindi, se non sei un collaboratore e provi a spingere, riceverai un errore che indica che non sei autorizzato.


Quindi, come possono gli altri sviluppatori spingere in un repository che non hanno il permesso di spingere?
Non puoi dare accesso a tutti, eppure vuoi dare altri un punto di uscita / ingresso in modo che possano fare 'una richiesta al proprietario di pronti contro termine a tirare questo codice nel repository'. In poche parole, rendendo accessibile il repository, possono effettuare il fork ... apportare le modifiche nel proprio fork. Spingi le loro modifiche al loro fork . Una volta entrato nel loro repository remoto:

Fanno una richiesta pull dal loro fork e il proprietario del repository upstream (che non è possibile inviare direttamente) deciderà se unire o meno la richiesta pull.


Anche una domanda semi-correlata che raccomando di leggere Cosa succede esattamente in un git push? Perché una push git non è considerata come una fusione git?


4
per le persone che non si rendono conto che esiste una differenza di autorizzazione tra push e pull, questa risposta ha molto senso.
buddie,

29

Pull Richiesta: Richiedi a voi per tirare il mio.


7
Come utente lo vedo dal mio punto di vista, non dovrebbe essere "Chiedo di inviarlo a te?" I >>> You - Stai cambiando il punto di riferimento due volte nello stesso contesto ... piuttosto che I >>>> You <<<< Mine
Marin,

1
Questa risposta ha più senso.
Shivams,

Facile spremuto al limone
Ivan Ivković

Ti chiedo di estrarre il mio ..... da dove ??? Capisco che ciò provenga da un fork del progetto originale? o da una copia locale?
KansaiRobot

5

Voglio spingere qualcosa nel repository di qualcun altro.

Non ho il permesso di spingere (o tirare, per quella materia).

Il proprietario / collaboratori ha le autorizzazioni. Possono tirare e spingere. Non posso spingere.

Quindi, chiedo loro di eseguire un tiro da me - il che significa indirettamente che sto chiedendo loro di accettare la mia spinta.

Quindi, nessuna richiesta di push. Solo per un tiro. E per accettazione di una spinta.

Quindi, una richiesta 'pull'. E non una richiesta "push".


4

È la parola "Richiesta" che è la chiave in queste azioni. Potresti anche pensarlo dicendo "Ho una richiesta per te di accettare il mio lavoro, accetti?" - "Una richiesta pull".

All'inizio è leggermente confuso, ma alla fine ha senso.


1

Per capirlo meglio e ricordarlo per sempre, devi immaginarlo.

Immagina un grande albero vivente {come il tuo repository}. L'albero è troppo robusto per poter inserire un ramo o aggiungere una nuova parte in esso {simboleggia la creazione di un nuovo ramo o la pressione del codice in esso}, invece devi chiedere all'albero di tirare un ramo nel tronco o avere il cambiamenti da te.

Il termine "richieste pull" deriva dalla natura distribuita. Invece di inserire semplicemente le tue modifiche nel repository (come faresti con un repository centralizzato, ad esempio con Subversion), pubblichi le modifiche separatamente e chiedi al manutentore di inserire le modifiche. Il manutentore può quindi esaminare le modifiche ed eseguire pull.

Quindi in pratica "richiedi" i ragazzi con accesso in scrittura al repository a cui vuoi contribuire, per "estrarre" dal tuo repository.

Le richieste pull ti consentono di comunicare agli altri le modifiche che hai inviato a un ramo in un repository su GitHub. Una volta aperta una richiesta pull, è possibile discutere ed esaminare le potenziali modifiche con i collaboratori e aggiungere commit di follow-up prima che le modifiche vengano unite nel ramo di base. Spiegazione di Github


0

Penso che sia una terminologia stupido perché voglio pensare che io voglio spingere qualcosa a voi e non pensare viceversa chiedere a qualcun altro di tirare miniera addings. Pertanto, dovrebbe essere modificato in PUSH REQ. dal momento che sono la parte attiva. La freccia va dall'altra parte a partire da me e non dal Pippo dall'altra parte. A PARER MIO.


0

Pensa in questo modo. Repository locale vs Repository remoto.

  • Quando si spinge da locale. ( git push) - in altre parole, il repository remoto sta estraendo i codici da te (locale).

Stai richiedendo qualcosa. Quindi, chiediti

  • Vuoi repository remoto Estrarre codici da te? - Richiesta pull.

Penso che sia importante fare la distinzione che non è possibile effettuare richieste push. Se puoi spingere e lo fai, non è una richiesta, si fonderà con il master. Una richiesta pull verso un repository git hub è che stai chiedendo di unire il tuo codice.
James,

Lo uso solo come esempio. Certo, Github può spingere il codice. ma modificherò la mia risposta.
Jin Lim

0

Temo che la maggior parte di queste risposte risponda alla domanda Che cosa significa "pull request"? o Cosa significherebbe "richiesta push"? piuttosto che la domanda del PO: Perché si chiama una richiesta pull e non una richiesta push?

Normalmente questo tipo di sostituzione di domande è accettabile, ma in questo caso è chiaro che l'OP conosce le risposte a queste domande di sostituzione, quindi rispondere ad esse non è molto utile.

Solo le persone di GitHub che hanno coniato il termine lo sanno per certo. Tuttavia sembra evidente che questa scelta terminologica rifletta qualcosa di simile al seguente punto di vista riguardante il fenomeno dei "cambiamenti che entrano in un deposito dall'esterno": il manutentore esegue l'azione (pull) .

Tuttavia, una richiesta è anche un'azione e chi compie tale azione non è il manutentore ma piuttosto il mittente (che ha fatto ancora più azioni, vale a dire il lavoro). Pertanto, il termine "richiesta pull" crea confusione su chi sia l'agente . In definitiva la confusione sorge a causa della natura ricorsiva di una richiesta: una richiesta è sia un'azione di un agente primario sia una richiesta di un'azione futura di un secondo agente.

La situazione è abbastanza analoga ai costrutti linguistici ormai comuni come "abbiamo costruito la nostra casa" (usato al posto di "abbiamo pagato qualcun altro per costruire la nostra casa"), in quanto la responsabilità dell'azione primaria è spostata dall'ovvio agente originale a un agente secondario che ricopre un ruolo sociale manageriale.

Si potrebbe concludere da ciò che la ragione della scelta terminologica è la legittimazione del punto di vista che il lavoro manageriale è il lavoro di prima classe . Inoltre, il motivo di confusione su questa scelta terminologica potrebbe essere che i lavoratori non dirigenti hanno naturalmente un punto di vista diverso.

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.