Comment associer une nouvelle demande d'extraction à un problème existant sur github?

409

Je ne suis pas sûr, mais j'ai un vague souvenir d'avoir créé une requête pull github avec "Issue 4" ou quelque chose dans le titre, et il s'est automatiquement attaché à Issue 4 dans le projet auquel je le soumettais. Je l'ai réessayé récemment et cela n'a pas fonctionné - cela a juste créé un tout nouveau problème à la place. Je ne vois aucune option comme «Attacher au problème» sur la nouvelle page de demande d'extraction, ni «Ouvrir une nouvelle demande d'extraction pour ce problème» sur la page du problème. Existe-t-il un moyen de le faire, pour aider les propriétaires de projets à garder leur page Problèmes propre et à éviter les doublons?

Edit : Pour clarifier, je sais que la création d'une demande de pull crée toujours un nouveau problème. Je voudrais plutôt attacher la demande d'extraction à un problème existant .

MatrixFrog
la source
1
Je crois que ma réponse exprime le fait que la fonctionnalité que vous souhaitez ("joindre une demande de tirage à un problème existant ") n'est peut-être pas encore là.
VonC
C'est le cas (et cela est en fait confirmé par ce tweet ), mais cela m'a aussi fait comprendre que ma question aurait pu être plus claire.
MatrixFrog
J'espère que cette fonctionnalité figure en haut de la liste des priorités de github, car le code confirme qu'il adorerait!
flq
2
La bonne réponse devrait être remplacée par celle de masukomi, maintenant que la méthode "fixe # 1" est disponible. Pas besoin de passer par l'API.
Edward Anderson,
Je ne parviens toujours pas à trouver un moyen de joindre une demande d'extraction à un problème existant. Ai-je raté quelque chose? Les réponses dans ce fil semblent suggérer que cette capacité existe, mais je ne la trouve pas (cela fait toujours un nouveau problème).
Kevin Jalbert

Réponses:

245

Le projet "hub" peut faire ceci:

https://github.com/defunkt/hub

Dans le référentiel et la branche à partir desquels vous souhaitez envoyer une demande d'extraction:

$ hub pull-request -i 4

Cela utilise l'API GitHub et attache une demande d'extraction pour la branche actuelle au problème numéro 4 existant.


EDIT: Commentaire de @atomicules: Pour développer la réponse de @MichaelMior, un exemple complet est:

$ hub pull-request -i 4 -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
Christian Oudard
la source
12
brew install hubà installer avec homebrew
gcamp
11
Ça ne marche pas pour moi. Dit une erreur lors de la création de la demande d'extraction: entité non traitable (HTTP 422)
Rubycut
11
@Rubycut J'ai eu le même problème. Au lieu de cela hub pull-request URL_TO_ISSUE, alors cela a fonctionné pour moi. Je me demande si cela -i ISSUE_NUMBERne fonctionne que si le problème est dans le même référentiel (c'est-à-dire pas une fourchette)
Michael Mior
30
Pour développer la réponse de @MichaelMior, un exemple complet est:hub pull-request -b USERNAME_OF_UPSTREAM_OWNER:UPSTREAM_BRANCH -h YOUR_USERNAME:YOUR_BRANCH URL_TO_ISSUE
atomicules
4
Notez que cela ne fonctionne que sur les problèmes que vous avez créés: github.com/defunkt/hub/issues/189#issuecomment-6353354
Zach
237

L'ajout d'une demande d'extraction à un problème en amont existant est facile en supposant que vous ayez bifurqué en utilisant les moyens github normaux .

Faites simplement référence au problème dans votre message de validation à l'aide de l'un des mots clés pris en charge :

  • Fermer
  • se ferme
  • fermé
  • réparer
  • corrections
  • fixé
  • résoudre
  • résout
  • résolu

Par exemple: "ce commit corrige # 116"

Le texte faisant référence au problème n'a pas besoin d'apparaître dans la ligne d'objet de votre commit.

Poussez votre commit sur votre dépôt github et la demande de pull sera automatiquement ajoutée au problème.

Remarque: Bien que cela ne soit pas obligatoire, il est fortement recommandé de valider tout ce qui fera partie d'une demande d'extraction dans une branche distincte spécifique à ce problème, car les validations futures sur cette branche seront ajoutées à la demande d'extraction (automatiquement par github ). Donc, si vous n'avez pas créé de branche distincte, que vous l'avez laissée sur master, puis que vous avez continué à développer, toutes vos validations non liées à master seront ajoutées à votre demande d'extraction.

masukomi
la source
31
"il est fortement recommandé de valider tout ce qui fera partie d'une demande d'extraction dans une branche distincte spécifique à ce problème, car les validations futures sur cette branche seront ajoutées à la demande d'extraction" - très bon point. Cela m'est arrivé une fois et c'était assez surprenant.
MatrixFrog
9
Cela ne résout pas le problème de transformer un problème en demande de tirage malheureusement. Toute discussion qui a eu lieu sur le problème n'est pas transférée à la demande de tirage ... ce qui est regrettable pour plusieurs cas d'utilisation. Je souhaite que Github donne juste un contrôle granulaire sur le fonctionnement des pull-reqs dans les paramètres de repo.
Alex Waters
1
@masukomi Une demande d'extraction est plus facile à résoudre pour le responsable du projet - il peut accepter et fusionner les modifications en cliquant sur un bouton. Pour extraire une modification dans une fourchette sans utiliser de demande d'extraction, vous devez ajouter la fourchette en tant que télécommande, récupérer ses modifications et les fusionner vous-même.
Rory O'Kane
2
Je pense que vous avez manqué mon point Rory. Si vous créez une demande de tirage et la mentionnez dans le problème (comme je l'ai suggéré), les deux sont connectés et vous pouvez toujours cliquer sur un bouton pour obtenir les modifications.
masukomi
2
Cela n'aide pas lorsque la demande de tirage est en cours. Notre flux de travail consiste à créer des problèmes pour les idées, puis à extraire les demandes des branches de fonctionnalités une fois que nous avons commencé à travailler sur ces idées. La fermeture du problème à l'aide d'une validation dans la demande d'extraction signifie que nous perdons la discussion précédente que contenait le problème, qui comprend souvent le hachage de la fonctionnalité / correction / refactorisation du problème. Ce qui est vraiment nécessaire, c'est un moyen de transformer directement un problème en demande de retrait une fois que le travail sur le problème a commencé.
Daniel Bingham
144

Vous pouvez créer une Pull Request à partir d'un problème existant avec l' API Pull Request :

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

Cela crée une demande d'extraction:

  • demander technoweenieau projet faraday(https://api.github.com/repos/ technoweenie / faraday / pulls)
  • pour tirer de la synchronybranche dans smparkes'fork ("head": " smparkes : synchrony ")
  • à la masterbranche dans technoweenie's fork ("base": " master ")
  • et attachez la demande d'extraction au problème 15 ("problème": 15 )
  • avec l'auteur de la demande de tirage smparkes(--user " smparkes ")
  • vous serez invité à entrer votre mot de passe GitHub
Rory O'Kane
la source
1
J'ai copié certains exemples de code à partir de ce lien. J'espère que cela ne vous dérange pas, et faites-le moi savoir si je l'ai mal traduit!
MatrixFrog
3
Vous avez également besoin d'une authentification, ajoutez ceci à la commande ci-dessus: -u "login: mot de passe"
morgoth
2
Je voudrais juste ajouter que cette méthode fonctionne toujours, mais elle peut avoir pour effet secondaire de lister votre commit deux fois sur la page de discussion, si GitHub l'avait déjà implicitement repris du problème # dans son message ( exemple ). Cependant, la validation n'est effectuée qu'une seule fois sur la demande de tirage officielle.
Greg Haskins
3
Peut-il être mis à jour vers l'API v3? GitHub vient de désactiver l'API v2.
Michael Best
1
@rsanchezsaez Comme je l' ai dit dans ma réponse , le changement --user "smparkes:password"d' --user "smparkes"être invité à entrer votre mot de passe de manière interactive.
Rory O'Kane
10

Cette autre réponse explique comment utiliser cURL ( curl) pour créer une demande d'extraction à partir d'un problème via l' API GitHub . Voici comment le faire en utilisant HTTPie ( http), qui produit une commande plus facile à lire et à éditer:

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

Tapez ensuite votre mot de passe GitHub lorsque vous y êtes invité.

Exemple expliqué

Vous vous êtes connecté à GitHub avec le nom d'utilisateur smparkes et le mot de passe hunter2 . Vous avez vu le repo de technoweenie faraday , pensé à quelque chose qui devrait être changé, et avez fait un numéro sur ce repo pour cela, numéro 15 . Plus tard, vous constatez que personne d'autre n'a apporté la modification proposée et vous avez également le temps de le faire vous-même. Vous fourche faraday à votre propre compte , puis d' écrire vos modifications et les pousser à la fourche sous une branche nommée synchronie . Vous pensez que le technoweenie devrait apporter ces changements au maîtrebranche de son repo. Voici la commande que vous écririez pour convertir votre problème précédent en une demande d'extraction pour cette situation:

$ 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

Maintenant, le numéro 15 est une demande de tirage.

Rory O'Kane
la source
3

dans le cas où vous utilisez l'authentification à 2 facteurs avec github, vous devrez fournir l'authtoken comme en-tête dans la demande:

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
la source
1
Oui, 2FA empêche la plupart des réponses ici de fonctionner. Dans mon cas, j'ai créé un jeton d'accès personnel et je l'utilise plutôt que mon mot de passe, qui fonctionne.
berto
1

Vous pouvez également utiliser Gub pour soumettre des demandes d'extraction pour votre problème.

Il vous aide également à utiliser un style approprié de demande de fork / pull.

Éditer: 05/10/2013

Pour que Gub soumette une pull-request pour le problème # 123, vous devez exécuter ce qui suit:

$ gub start 123

Cela va créer un nouveau numéro de branche-123. Une fois que vous avez fini de travailler sur le problème, exécutez:

$ gub finish

Voila!

Remarque: je suis l'auteur de Gub gem.

Omar Ali
la source
1

Au lieu de le faire côté client (avec hub, comme dans la réponse de Christian Oudard ), vous pouvez maintenant (février 2020) le faire côté serveur (github.com)

Voir " Afficher et lier les problèmes et extraire les demandes de la barre latérale "

Vous pouvez désormais lier les problèmes et extraire les demandes via la barre latérale dans leurs pages respectives. Les connexions établies ici fermeront automatiquement les problèmes une fois qu'une demande d'extraction liée est fusionnée.

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

Et il existe une API de recherche avec cette fonctionnalité.

Recherchez tous les problèmes ouverts dans un référentiel qui ont des références de fermeture de demandes d'extraction avec le linked:prqualificatif de recherche.
De même, localisez toutes les demandes d'extraction dans un référentiel auxquelles il manque un problème de prise en charge -linked:issue.

VonC
la source
0

En utilisant l' outil git-hub , vous pouvez le faire avec:

$> git hub pull attach 123

Cela convertirait le problème # 123 en demande de tirage # 123, maintenant ainsi toute la discussion sur le problème dans un seul endroit.

Gautam
la source
0

Si vous avez activé 2FA, vous pouvez utiliser passer le jeton avec HTTPie:

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

Cela utilisera la branche issue_2pour convertir le problème # 2 en une demande de tirage.

Kyle Gibson
la source