Como você anexa uma nova solicitação pull a um problema existente no github?

409

Não tenho certeza, mas tenho uma vaga memória de criação de uma solicitação pull do github com "Problema 4" ou algo do título, e ela se anexou automaticamente ao Problema 4 no projeto para o qual eu estava enviando. Tentei novamente recentemente e não funcionou - apenas criou um novo problema. Não vejo opções como "Anexar ao problema" na nova página de solicitação de recebimento nem "Abrir uma nova solicitação de recebimento para este problema" na página do problema. Existe alguma maneira de fazer isso, para ajudar os proprietários do projeto a manterem limpa a página de Problemas e evitar a duplicação?

Editar : para esclarecer, eu sei que a criação de uma solicitação de recebimento sempre cria um novo problema. Em vez disso, gostaria de anexar a solicitação de recebimento a um problema existente .

MatrixFrog
fonte
1
Acredito que minha resposta expresse o fato de que o recurso que você deseja ("anexar uma solicitação de recebimento a um problema existente ") talvez ainda não esteja lá.
VonC
É verdade (e isso é de fato confirmado por este tweet ), mas também me fez perceber que minha pergunta poderia ter sido mais clara.
MatrixFrog
Espero que esse recurso esteja no topo da lista de prioridades do github, porque o código tem por aí adoraria!
FLQ
2
A resposta correta deve ser alterada para masukomi, agora que o método "corrige # 1" disponível. Não há necessidade de passar pela API.
Edward Anderson
Ainda não consigo encontrar uma maneira de anexar uma solicitação de recebimento a um problema existente. Perdi alguma coisa? As respostas neste tópico parecem sugerir que esse recurso existe, mas não consigo encontrá-lo (ele sempre cria um novo problema).
precisa

Respostas:

245

O projeto "hub" pode fazer isso:

https://github.com/defunkt/hub

No repositório e na ramificação da qual você deseja enviar uma solicitação de recebimento de:

$ hub pull-request -i 4

Isso usa a API do GitHub e anexa uma solicitação de recebimento da ramificação atual ao número de problema existente 4.


EDIT: Comentário de @atomicules: Para expandir a resposta de @MichaelMior, um exemplo completo é:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
Christian Oudard
fonte
12
brew install hubinstalar com homebrew
gcamp
11
Isso não funciona para mim. Diz pedido Erro ao criar tração: Unprocessable Entity (HTTP 422)
Rubycut
11
@ Rubycut Eu tive o mesmo problema. Em vez disso hub pull-request URL_TO_ISSUE, funcionou para mim. Pergunto-me se -i ISSUE_NUMBERsó funciona se o problema é no mesmo repositório (ou seja, não um garfo)
Michael Mior
30
Para expandir a resposta de @MichaelMior, um exemplo completo é:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomicules
4
Observe que isso só funciona nos problemas que você criou: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach
237

Adicionar uma solicitação pull a um problema existente do upstream é fácil, desde que você tenha bifurcado usando os meios normais do github .

Basta referenciar o problema na sua mensagem de confirmação usando qualquer uma das palavras - chave suportadas :

  • Fechar
  • fecha
  • fechadas
  • consertar
  • Conserta
  • fixo
  • resolver
  • resolve
  • resolvido

Por exemplo: "este commit corrige o número 116"

O texto referente ao problema não precisa aparecer na linha de assunto do seu commit.

Envie seu commit ao seu repositório do github e a solicitação de recebimento será automaticamente anexada ao problema.

Nota: Embora não seja obrigatório, é altamente recomendável que você submeta qualquer coisa que faça parte de uma solicitação pull a uma ramificação separada específica para esse problema, porque as confirmações futuras nessa ramificação serão anexadas à solicitação pull (automaticamente pelo github ) Portanto, se você não criou uma ramificação separada, a deixou no mestre e continuou desenvolvendo, todas as suas confirmações não relacionadas ao mestre seriam anexadas à sua solicitação de recebimento.

masukomi
fonte
31
"é altamente recomendável que você submeta qualquer coisa que faça parte de uma solicitação pull a uma ramificação separada específica para esse problema, porque as confirmações futuras nessa ramificação serão anexadas à solicitação pull" - ponto muito bom. Isso aconteceu comigo uma vez e foi bastante surpreendente.
precisa saber é o seguinte
9
Infelizmente, isso não resolve o problema de transformar um problema em uma solicitação de recebimento. Qualquer discussão que ocorreu no problema não é transferida para a solicitação pull, o que é lamentável para vários casos de uso. Eu gostaria que o Github desse apenas um controle granular sobre como os pull-reqs funcionam nas configurações de repo.
21812 Alex Waters
1
@masukomi Uma solicitação de recebimento é mais fácil para o mantenedor do projeto resolver - ele pode aceitar e mesclar as alterações com o clique de um botão. Para puxar uma alteração em uma bifurcação sem usar uma solicitação de recepção, você teria que adicionar a bifurcação como um controle remoto, buscar as alterações e mesclar você mesmo.
Rory O'Kane
2
Eu acho que você perdeu o meu argumento, Rory. Se você criar uma solicitação pull e mencioná-la no problema (como sugeri), as duas estarão conectadas e você ainda poderá clicar em um botão para obter as alterações.
Masukomi
2
Isso não ajuda quando a solicitação de recebimento está em andamento. Nosso fluxo de trabalho é criar problemas para idéias e, em seguida, puxar solicitações das ramificações de recursos quando começarmos a trabalhar nessas idéias. Fechar o problema usando uma confirmação na solicitação pull significa que perdemos a discussão anterior que o problema continha, o que geralmente inclui o hash de qualquer recurso / correção / refatoração que o problema soluciona. O que é realmente necessário é uma maneira direta de transformar um problema em uma solicitação pull, uma vez iniciado o trabalho sobre o problema.
Daniel Bingham
144

Você pode criar uma solicitação de recebimento a partir de um problema existente com a API de solicitação de recebimento :

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

Isso cria uma solicitação de recebimento:

  • pergunte technoweenieno projeto faraday(https://api.github.com/repos/ technoweenie / faraday / pulls)
  • puxar do synchronygalho em smparkes'fork ("head": " smparkes : synchrony ")
  • para o masterramo na technoweeniebifurcação ("base": " master ")
  • e anexe a solicitação pull ao problema 15 ("problema": 15 )
  • com o autor da solicitação de smparkesrecebimento (--user " smparkes ")
  • você será solicitado a fornecer sua senha do GitHub
Rory O'Kane
fonte
1
Copiei alguns dos códigos de exemplo desse link. Espero que você não se importe, e por favor me avise se eu traduzi errado!
MatrixFrog
3
Você também precisa de autenticação, adicione isto ao comando acima: -u "login: password"
morgoth 23/02
2
Gostaria apenas de acrescentar que esse método ainda funciona, mas pode ter o efeito colateral de listar seu commit duas vezes na página de discussão, se o GitHub já o tiver pego implicitamente no problema # em sua mensagem ( exemplo ). O commit só ocorre uma vez na solicitação de recebimento oficial.
precisa
3
Isso pode ser atualizado para a API v3? O GitHub acabou de desativar a API v2.
Michael Best
1
@rsanchezsaez Como eu disse em minha resposta , a mudança --user "smparkes:password"para --user "smparkes"que lhe seja pedida a sua senha de forma interativa.
Rory O'Kane
10

Esta outra resposta explica como usar cURL ( curl) para criar uma solicitação pull de um problema por meio da API do GitHub . Veja como fazer isso usando HTTPie ( http), que produz um comando mais fácil de ler e mais fácil de editar:

$ 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>

Em seguida, digite sua senha do GitHub quando solicitado.

Exemplo explicado

Você fez login no GitHub com o nome de usuário smparkes e a senha hunter2 . Você viu technoweenie ‘s repo Faraday , pensou em algo que deve ser mudado, e fez um problema em que repo para ele, a edição # 15 . Mais tarde, você descobrirá que ninguém mais fez a alteração proposta e também terá tempo para fazer isso sozinho. Você bifurcar Faraday para a sua própria conta , em seguida, escrever as alterações e empurrá-los para o seu garfo sob um ramo chamado sincronia . Você acha que o technoweenie deve puxar essas mudanças para o mestreramo de seu repo. Este é o comando que você escreveria para converter seu problema anterior em uma solicitação pull para esta situação:

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

Agora, a edição 15 é uma solicitação de recebimento.

Rory O'Kane
fonte
3

caso você use 2-factor-auth no github, será necessário fornecer o authtoken como cabeçalho na solicitação:

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
Jörn Hees
fonte
1
Sim, o 2FA impede que muitas das respostas aqui funcionem. No meu caso, criei um token de acesso pessoal e o usei em vez da minha senha, que funciona.
21316
1

Você também pode usar o Gub para enviar solicitações de recebimento para o seu problema.

Também ajuda a usar um estilo adequado de solicitação de forquilha / puxar.

Edição: 05/10/2013

Para que o Gub envie uma solicitação de recebimento para o problema nº 123, execute o seguinte:

$ gub start 123

Isso criará um novo problema de ramificação-123. Quando terminar de trabalhar no problema, execute:

$ gub finish

Voila!

Nota: Eu sou o autor da gema Gub.

Omar Ali
fonte
1

Em vez de fazer isso no lado do cliente (com hub, como na resposta de Christian Oudard ), você agora (fevereiro de 2020) pode fazê-lo no lado do servidor (github.com)

Consulte " Exibir e vincular problemas e receber solicitações da barra lateral "

Agora você pode vincular problemas e receber solicitações pela barra lateral em suas respectivas páginas. As conexões feitas aqui fecharão automaticamente os problemas assim que uma solicitação de recebimento vinculada for mesclada.

Documentação :https://help.github.com/assets/images/help/pull_requests/link-issue-drop-down.png

E há uma API de pesquisa com esse recurso.

Encontre todos os problemas em aberto em um repositório que possui referências de solicitações pull de fechamento com o linked:prqualificador de pesquisa.
Da mesma forma, localize todas as solicitações pull em um repositório com as quais está faltando um problema de suporte -linked:issue.

VonC
fonte
0

Usando a ferramenta git-hub , você pode fazer isso com:

$> git hub pull attach 123

Isso converteria o problema 123 na solicitação de recebimento 123, mantendo assim toda a discussão sobre o problema em um único local.

Gautam
fonte
0

Se você tiver o 2FA ativado, poderá passar o token com o HTTPie:

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

Isso usará a ramificação issue_2para converter o problema nº 2 em uma solicitação de recebimento.

Kyle Gibson
fonte