Come si allega una nuova richiesta pull a un problema esistente su github?


409

Non ne sono sicuro, ma ho una vaga memoria della creazione di una richiesta di pull github con "Numero 4" o qualcosa del titolo e si è automaticamente allegata al Numero 4 nel progetto a cui lo stavo inviando. L'ho provato di nuovo di recente e non ha funzionato, ma ha creato un nuovo problema. Non vedo alcuna opzione come "Allega al problema" nella nuova pagina della richiesta pull, né "Apri una nuova richiesta pull per questo problema" nella pagina del problema. C'è un modo per farlo, per aiutare i proprietari dei progetti a mantenere pulita la loro pagina Problemi ed evitare duplicazioni?

Modifica : per chiarire, so che la creazione di una richiesta pull crea sempre un nuovo problema. Vorrei invece allegare la richiesta pull a un problema esistente .


1
Credo che la mia risposta esprima il fatto che la funzione desiderata ("allegare una richiesta pull a un problema esistente ") potrebbe non essere ancora presente.
VonC,

Lo fa (e questo è confermato da questo tweet ), ma mi ha anche fatto capire che la mia domanda avrebbe potuto essere più chiara.
MatrixFrog il

Spero che questa caratteristica sia in cima alla lista delle priorità di github, perché il codice è evidente che lo adorerebbe!
flq

2
La risposta corretta dovrebbe essere cambiata in quella di Masukomi, ora che è disponibile il metodo "fixes # 1". Non è necessario passare attraverso l'API.
Edward Anderson,

Non riesco ancora a trovare un modo per allegare una richiesta pull a un problema esistente. Ho perso qualcosa? Le risposte in questo thread sembrano suggerire che questa capacità esiste, ma non riesco a trovarla (crea sempre un nuovo problema).
Kevin Jalbert,

Risposte:


245

Il progetto "hub" può fare questo:

https://github.com/defunkt/hub

Nel repository e nel ramo da cui si desidera inviare una richiesta pull:

$ hub pull-request -i 4

Questo utilizza l'API GitHub e allega una richiesta pull per il ramo corrente al numero di problema esistente 4.


EDIT: Commento di @atomicules: per espandere la risposta di @MichaelMior un esempio completo è:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE

12
brew install hubper l'installazione con homebrew
gcamp

11
Questo non funziona per me. Segnala errore durante la creazione della richiesta pull: entità non
elaborabile

11
@Rubycut Ho avuto lo stesso problema. Invece l'ho fatto hub pull-request URL_TO_ISSUE, poi ha funzionato per me. Mi chiedo se -i ISSUE_NUMBERfunziona solo se il problema si trova nello stesso repository (ovvero, non un fork)
Michael Mior,

30
Per espandere la risposta di @MichaelMior un esempio completo è:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomici

4
Nota che funziona solo sui problemi che hai creato: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach,

237

Aggiungere una richiesta pull a un problema esistente a monte è facile supponendo che tu abbia effettuato il fork usando i normali mezzi github .

Basta fare riferimento al problema nel messaggio di commit utilizzando una delle parole chiave supportate :

  • vicino
  • chiude
  • chiuso
  • fix
  • correzioni
  • fisso
  • risolvere
  • risolve
  • risoluto

Ad esempio: "questo commit corregge # 116"

Il testo che fa riferimento al problema non deve apparire nella riga dell'oggetto del commit.

Invia il commit al tuo repository github e la richiesta pull verrà automaticamente aggiunta al problema.

Nota: sebbene non sia necessario, si consiglia vivamente di eseguire il commit di tutto ciò che farà parte di una richiesta pull in un ramo separato specifico per quel problema, poiché i futuri impegni su quel ramo verranno aggiunti alla richiesta pull (automaticamente da github ). Quindi, se non hai creato un ramo separato, lo hai lasciato sul master e poi hai continuato a sviluppare, tutti i tuoi commit non correlati al master verrebbero aggiunti alla tua richiesta pull.


31
"si consiglia vivamente di eseguire il commit di tutto ciò che farà parte di una richiesta pull in un ramo separato specifico per quel problema, perché i futuri impegni su quel ramo verranno aggiunti alla richiesta pull" - ottimo punto. Mi è successo una volta ed è stato abbastanza sorprendente.
MatrixFrog,

9
Questo, purtroppo, non risolve il problema di trasformare un problema in una richiesta pull. Qualsiasi discussione avuta nel problema non viene trasferita alla richiesta pull ... il che è sfortunato per diversi casi d'uso. Vorrei che Github potesse dare un controllo granulare su come funzionano i pull-req nelle impostazioni dei repository.
Alex Waters

1
@masukomi Una richiesta pull può essere risolta più facilmente dal manutentore del progetto: possono accettare e unire le modifiche con un clic di un pulsante. Per eseguire il pull di una modifica in un fork senza utilizzare una richiesta pull, dovresti aggiungere il fork come telecomando, recuperare le modifiche e unirle tu stesso.
Rory O'Kane,

2
Penso che ti sia mancato il punto Rory. Se crei una richiesta pull e la menzioni nel problema (come ho suggerito), i due sono collegati e puoi ancora fare clic su un pulsante per ottenere le modifiche.
Masukomi,

2
Questo non aiuta quando la richiesta pull è in corso. Il nostro flusso di lavoro consiste nel creare problemi per le idee, quindi estrarre le richieste dai rami delle funzionalità quando iniziamo a lavorare su tali idee. Se si chiude il problema utilizzando un commit nella richiesta pull, si perde la discussione precedente contenuta nel problema, che spesso include l'hashing di qualsiasi caratteristica / correzione / refactoring che il problema risolve. Ciò che è veramente necessario è un modo per trasformare immediatamente un problema in una richiesta pull una volta iniziato il lavoro sul problema.
Daniel Bingham,

144

Puoi creare una richiesta pull da un problema esistente con l' API richiesta pull :

$ curl --user "smparkes" \
       --request POST \
       --data '{"issue": 15, "head": "smparkes:synchrony", "base": "master"}' \
       https://api.github.com/repos/technoweenie/faraday/pulls

Questo crea una richiesta pull:

  • chiedi technoweenieal progetto faraday(https://api.github.com/repos/ technoweenie / faraday / pulls )
  • tirare dal synchronyramo in smparkes'fork ("head": " smparkes : synchrony ")
  • al masterramo nel technoweeniefork di "(" base ":" master ")
  • e allega la richiesta pull al numero 15 ("issue": 15 )
  • con l'autore della richiesta pull smparkes(--user " smparkes ")
  • ti verrà richiesta la tua password GitHub

1
Ho copiato parte del codice di esempio da quel link. Spero non ti dispiaccia, e per favore fammi sapere se l'ho tradotto male!
MatrixFrog il

3
È inoltre necessaria l'autenticazione, aggiungere questo per il comando sopra: -u "login: password"
morgoth

2
Vorrei solo aggiungere che questo metodo funziona ancora, ma potrebbe avere l'effetto collaterale di elencare il commit due volte nella pagina di discussione, se GitHub lo avesse già preso implicitamente dal numero # nel suo messaggio ( esempio ). Tuttavia, il commit arriva solo una volta sulla richiesta di pull ufficiale.
Greg Haskins,

3
Questo può essere aggiornato all'API v3? GitHub ha appena spento l'API v2.
Michael Best,

1
@rsanchezsaez Come ho detto nella mia risposta , cambia --user "smparkes:password"in --user "smparkes"per ricevere la password in modo interattivo.
Rory O'Kane,


10

Quest'altra risposta spiega come utilizzare cURL ( curl) per creare una richiesta pull da un problema tramite l' API GitHub . Ecco come farlo usando HTTPie ( http), che produce un comando più facile da leggere e da modificare:

$ http --auth "<your-GitHub-username>" \
       POST \
       https://api.github.com/repos/<issue-repo-owner>/<issue-repo-name>/pulls \
       issue=<issue-number> head=<your-GitHub-username>:<your-fork-branch-name> base=<issue-repo-branch-name>

Quindi digitare la password GitHub quando richiesto.

Esempio spiegato

Hai effettuato l'accesso a GitHub con username smparkes e password hunter2 . Hai visto technoweenie ‘s repo Faraday , pensato a qualcosa che dovrebbe essere cambiato, e fatto una questione su quella dei pronti contro termine per esso, Issue # 15 . Successivamente, scopri che nessun altro ha apportato la modifica proposta e hai anche del tempo per farlo da solo. Si sborsare Faraday per il proprio account , quindi scrivere le modifiche e li spingono a forcella sotto un ramo di nome sincronia . Pensi che la technoweenie dovrebbe attirare quei cambiamenti nel masterramo del suo repository. Questo è il comando che scriveresti per convertire la tua precedente emissione in una richiesta pull per questa situazione:

$ http --auth "smparkes" \
       POST \
       https://api.github.com/repos/technoweenie/faraday/pulls \
       issue=15 head=smparkes:synchrony base=master
http: password for smparkes@api.github.com: hunter2

Ora il numero 15 è una richiesta pull.


3

nel caso in cui usi 2-factor-auth con github dovrai fornire il authtoken come intestazione nella richiesta:

curl -u "<your_username>:<your_pw>" \
     --header 'X-GitHub-OTP: <your_authtoken>' \
     --request POST \
     --data '{"issue":"<issue_nr>", "head":"<your_username>:<your_forks_branchname>", "base":"<upstream_branch>"}' \
     https://api.github.com/repos/<upstream_user>/<upstream_repo>/pulls

1
Sì, 2FA impedisce a molte delle risposte qui di funzionare. Nel mio caso, ho creato un token di accesso personale e lo uso invece della mia password, che funziona.
berto

1

Puoi anche utilizzare Gub per inviare richieste pull per il tuo problema.

Ti aiuta anche a utilizzare uno stile di forcella / richiesta di trazione adeguato.

Modifica: 05/10/2013

Per fare in modo che Gub invii la richiesta pull per il problema n. 123, è necessario eseguire quanto segue:

$ gub start 123

Questo creerà un nuovo numero di filiale-123. Una volta terminato di lavorare sul problema, eseguire:

$ gub finish

Ecco!

Nota: sono l'autore della gemma Gub.


1

Invece di farlo sul lato client (con hub, come nella risposta di Christian Oudard ), ora (febbraio 2020) puoi farlo sul lato server (github.com)

Consulta " Visualizza e collega i problemi e tira le richieste dalla barra laterale "

Ora puoi collegare i problemi ed estrarre le richieste tramite la barra laterale nelle rispettive pagine. Le connessioni effettuate qui chiuderanno automaticamente i problemi una volta unita una richiesta pull collegata.

Documentazione :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

E c'è un'API di ricerca con quella funzione.

Trova tutti i problemi aperti in un repository con riferimenti di richieste pull di chiusura con il linked:prqualificatore di ricerca.
Allo stesso modo, individuare tutte le richieste pull in un repository a cui manca un problema di supporto -linked:issue.


0

Usando lo strumento git-hub , puoi farlo con:

$> git hub pull attach 123

Ciò trasformerebbe il problema n. 123 in richiesta pull n. 123, mantenendo così tutte le discussioni sul problema in un'unica posizione.


0

Se hai 2FA abilitato, puoi usare pass token con HTTPie:

http POST \
    https://api.github.com/repos/<repo-owner>/<repo-name>/pulls \
    issue=2 head=issue_2 base=master
    "Authorization:token PUTAUTHTOKENHERE"

Questo utilizzerà il ramo issue_2per convertire il problema n. 2 in una richiesta pull.

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.