Richiesta pull vs Richiesta unione


468

Qual è la differenza tra una richiesta Pull e una richiesta Merge.

In Github è una richiesta pull e in GitLab, ad esempio, è una richiesta di unione ... C'è una differenza tra entrambi?

Risposte:


766

La funzione "richiesta di unione" di GitLab è equivalente alla funzione "richiesta di pull" di GitHub . Entrambi sono mezzi per estrarre le modifiche da un altro ramo o fork nel proprio ramo e unire le modifiche con il codice esistente. Sono strumenti utili per la revisione del codice e la gestione delle modifiche.

Un articolo di GitLab discute le differenze nella denominazione della funzione:

Le richieste di unione o pull vengono create in un'applicazione di gestione git e chiedono a una persona assegnata di unire due rami. Strumenti come GitHub e Bitbucket scelgono la richiesta di pull del nome poiché la prima azione manuale sarebbe quella di estrarre il ramo della funzione. Strumenti come GitLab e Gitorious scelgono la richiesta di unione del nome poiché è l'azione finale richiesta all'assegnatario. In questo articolo faremo riferimento a loro come richieste di unione.

Una "richiesta di unione" non deve essere confusa con il git mergecomando. Né una "richiesta pull" deve essere confusa con il git pullcomando. Entrambi i gitcomandi vengono utilizzati dietro le quinte in entrambe le richieste pull e le richieste di unione, ma una richiesta di unione / pull fa riferimento a un argomento molto più ampio di questi due comandi.


1
GitHub crea un ramo intermedio / temporaneo (invisibile) quando viene effettuata una richiesta pull?
Robert Koritnik,

1
@stevemao possiamo accedervi? Stanno davvero leggendo solo perché possiamo risolvere i conflitti su di loro?
Robert Koritnik,

11
Cosa mi sto perdendo? pull = fetch + merge. Se l'azione finale è unisci, la prima azione deve essere recuperata.
Vytenis Bivainis,

61
MR è solo un nome migliore dappertutto. La richiesta pull non ha mai avuto senso per me fino a quando ho letto la tua spiegazione che si tratta della prima azione, mentre ho capito cosa significa richiesta di unione la seconda volta che l'ho letta per la prima volta. "ciao, potresti per favore unire questo codice al ramo principale?" vs "ciao, potresti tirare questo codice nel ramo invisibile per <fusione implicita>" - qui c'è un chiaro vincitore.
Granitosaurus,

7
@Granitosaurus Concordato. Come principiante a git, le richieste pull non erano assolutamente quelle che mi aspettavo fossero. Quando ho iniziato a utilizzare Gitlab, le richieste di unione avevano subito un senso.
Mark Lyons,

54

Sono la stessa caratteristica

Le richieste di unione o pull vengono create in un'applicazione di gestione git e chiedono a una persona assegnata di unire due rami. Strumenti come GitHub e Bitbucket scelgono la richiesta di pull del nome poiché la prima azione manuale sarebbe quella di estrarre il ramo della funzione. Strumenti come GitLab e Gitorious scelgono la richiesta di unione del nome poiché è l'azione finale richiesta all'assegnatario. In questo articolo faremo riferimento a loro come richieste di unione.

- https://about.gitlab.com/2014/09/29/gitlab-flow/


la fusione non dovrebbe essere responsabilità dello sviluppatore che sta aggiungendo una nuova funzionalità? se uno sviluppatore A aggiunge una funzionalità in feature_branch, dovrebbe prendere il ramo master e unirlo in cima al suo ramo per risolvere tutti i conflitti e testarlo prima di creare la richiesta di unione?
Ciasto piekarz,

2
Sì, ma c'è ancora una fusione rapida che qualcuno deve fare dopo per ottenere il codice da padroneggiare. E in realtà penso che in un team di sviluppatori a tempo pieno sia probabilmente meglio se anche lo sviluppatore della funzionalità si fonde, ma potrebbe essere utile per loro aspettare che qualcuno riveda prima il loro PR.
bdsl,

21

Dal mio punto di vista, significano la stessa attività ma da diverse prospettive:

Pensaci, Alice si impegna sul repository A, che è stato biforcato dal repository B.

Quando Alice vuole "unire" le sue modifiche in B, in realtà vuole che Bob "tiri" queste modifiche da A.

Pertanto, dal punto di vista di Alice, è una "richiesta di unione", mentre Bob la vede come una "richiesta pull".


Mi ha ricordato l'esempio quando ho fatto il piccolo rapporto per far sapere agli altri colleghi come funziona Git.
Ravi Yadav,

4

C'è una sottile differenza in termini di gestione dei conflitti. In caso di conflitti, una richiesta pull in Github comporterà un commit di unione sul ramo di destinazione . In Gitlab, quando viene rilevato un conflitto, le modifiche apportate saranno su un commit di unione sul ramo di origine .

Vedi https://docs.gitlab.com/ee/user/project/merge_requests/resolve_conflicts.html

"GitLab risolve i conflitti creando un commit di unione nel ramo di origine che non viene automaticamente unito nel ramo di destinazione. Ciò consente di verificare e testare il commit di unione prima che le modifiche vengano unite, evitando che modifiche indesiderate entrino nel ramo di destinazione senza revisione o interruzione la build ".


3

GitLab 12.1 (luglio 2019) introduce una differenza:

" Unisci richieste per problemi riservati "

Quando si discute, si pianifica e si risolvono problemi confidenziali, come le vulnerabilità della sicurezza, può essere particolarmente difficile per i progetti open source rimanere efficienti poiché il repository Git è pubblico.

https://about.gitlab.com/images/12_1/mr-confidential.png

A partire da 12.1, è ora possibile risolvere problemi confidenziali in un progetto pubblico all'interno di un flusso di lavoro semplificato utilizzando il pulsante Crea richiesta di unione confidenziale, che consente di creare una richiesta di unione in un fork privato del progetto.

Vedi " Problemi riservati " da numero 58583 .

Una funzionalità simile esiste in GitHub, ma comporta la creazione di uno speciale fork privato, chiamato " advisor di sicurezza del manutentore ".


0

Come menzionato nelle risposte precedenti, entrambi hanno quasi lo stesso scopo. Personalmente mi piace git rebase e unire richiesta (come in gitlab). Elimina l'onere del revisore / manutentore, assicurandosi che durante l'aggiunta della richiesta di unione, il ramo della funzione includa tutti gli ultimi commit eseguiti sul ramo principale dopo la creazione del ramo della funzione. Ecco un articolo molto utile che spiega in dettaglio rebase: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

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.