Je voudrais vérifier une demande de pull précédemment créée (créée via l'interface Web GitHub). J'ai cherché et trouvé différents endroits où un refs/pull ou refs/pull/pr
Mais quand j’ajoute fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*
au fichier de configuration git et que je fais une récupération git
Qu'est-ce que je fais mal? GitHub doit-il créer automatiquement les éléments pull/xyz ou dois-je configurer quelque chose?
Pour récupérer un PR distant dans votre référentiel local,
git fetch Origine pull/ID/tête: BRANCHNAME
où ID est l'identifiant de la demande d'extraction et nom de la branche est le nom de la nouvelle branche que vous souhaitez créer. Une fois que vous avez créé la branche, puis simplement
git checkout BRANCHNAME
Cela ira sans que vous ayez à nommer une branche:
git pull Origin pull/939/head
Comment puis-je obtenir une demande de tir spécifique sur ma machine?
This Gist ne décrit ce qui est arrivé quand vous faites un git chercher:
Évidemment, changez l'URL de github pour qu'elle corresponde à l'URL de votre projet. Cela finit par ressembler à ceci:
[remote "Origin"]
fetch = +refs/heads/*:refs/remotes/Origin/*
url = [email protected]:joyent/node.git
fetch = +refs/pull/*/head:refs/remotes/Origin/pr/*
Maintenant, récupérez toutes les demandes d'extraction:
$ git fetch Origin
From github.com:joyent/node
* [new ref] refs/pull/1000/head -> Origin/pr/1000
* [new ref] refs/pull/1002/head -> Origin/pr/1002
* [new ref] refs/pull/1004/head -> Origin/pr/1004
* [new ref] refs/pull/1009/head -> Origin/pr/1009
...
Pour vérifier une demande d'extraction particulière:
$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from Origin.
Switched to a new branch 'pr/999'
Vous avez divers scripts répertoriés dans numéros 259 pour automatiser cette tâche.
Le projet git-extras propose la commande git-pr
(implémentée dans PR 262 )
git-pr
(1) - Extrait une demande d'extraction localementSYNOPSIS
git-pr <number> [<remote>]
git-pr clean
LA DESCRIPTION
Crée une branche locale basée sur un numéro de demande d'extraction GitHub, puis bascule sur cette branche.
Le nom de la télécommande à récupérer. La valeur par défaut est
Origin
.EXEMPLES
Ceci extrait la demande d'extraction
226
deOrigin
:
$ git pr 226
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
* [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'
Je préfère aller chercher et extraire sans créer de branche locale et être dans HEAD détaché . Cela me permet de vérifier rapidement la demande d'extraction sans polluer ma machine locale avec des branches locales inutiles.
git fetch upstream pull/ID/head && git checkout FETCH_HEAD
où ID
est un ID de demande d'extraction et upstream
où est la demande d'extraction d'origine a été créée (il peut s'agir de Origin
, par exemple).
J'espère que ça aide.
En se référant à la réponse de Steven Penny, il est préférable de créer une branche de test et de tester le PR. Alors, voici ce que vous feriez.
git checkout -b test
git pull Origin pull/939/head:test
Maintenant, vous pouvez tester en toute sécurité les modifications sur cette branche de test locale (dans ce cas, nommée test ) et une fois que vous êtes satisfait, vous pouvez la fusionner comme d'habitude avec GitHub.
Vous pouvez utiliser la commande git config
pour écrire une nouvelle règle dans .git/config
afin d'extraire les demandes d'extraction du référentiel:
$ git config --local --add remote.Origin.fetch '+refs/pull/*/head:refs/remotes/Origin/pr/*'
Et puis juste:
$ git fetch Origin
Fetching Origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
Unpacking objects: 100% (4/4), done.
From https://github.com/container-images/memcached
* [new ref] refs/pull/2/head -> Origin/pr/2
* [new ref] refs/pull/3/head -> Origin/pr/3
123
et le nom de la branche de l'auteur - branch-name
. Copiez les deux.git status
.git fetch upstream pull/<id>/head:<branch>
. Dans cet exemple, vous tapez git fetch upstream pull/123/head:branch-name
git checkout branch-name
. Votre répertoire sera maintenant une copie exacte du PR. Assurez-vous d'informer l'auteur de tout bogue ou suggestion, car vous ne pouvez pas ajouter directement vos propres modifications à une demande d'extraction.git checkout master
pour revenir à votre version locale de Project Porcupine.Voir les instructions complètes ici - https://github.com/TeamPorcupine/ProjectPorcupine/wiki/How-test-a-Pull-Request#testing-someone-elses-pull-request
J'ai accidentellement fini par écrire presque la même chose que celle fournie par git-extras. Donc, si vous préférez une seule commande personnalisée au lieu d'installer un ensemble d'autres commandes supplémentaires, placez simplement ce fichier git-pr
quelque part dans votre $PATH
et vous pourrez alors écrire:
git pr 42
// or
git pr upstream 42
// or
git pr https://github.com/peerigon/phridge/pull/1
Pour Bitbucket, vous devez remplacer le mot pull
par pull-requests
.
Tout d'abord, vous pouvez confirmer le style d'URL de demande d'extraction par la commande git ls-remote Origin
.
$ git ls-remote Origin |grep pull
f3f40f2ca9509368c959b0b13729dc0ae2fbf2ae refs/pull-requests/1503/from
da4666bd91eabcc6f2c214e0bbd99d543d94767e refs/pull-requests/1503/merge
...
Comme vous pouvez le constater, il s'agit de refs/pull-requests/1503/from
au lieu de refs/pull/1503/from
Ensuite, vous pouvez utiliser les commandes de n’importe laquelle des réponses.
Le problème avec certaines des options ci-dessus, est que si quelqu'un insère plus d'engagement dans le PR après l'ouverture du PR, il ne vous donnera pas la version la plus à jour .. appuyez sur 'Commits', faites défiler jusqu'au bottom pour afficher le hachage de validation le plus récent puis utilisez simplement git checkout, c.-à-d.
git checkout <commit number>
dans l'exemple ci-dessus
git checkout 0ba1a50
Si vous suivez le flux de travail "github fork", vous créez un fork et ajoutez le référentiel en amont distant:
14:47 $ git remote -v
Origin [email protected]:<yourname>/<repo_name>.git (fetch)
Origin [email protected]:<yourname>/<repo_name>.git (Push)
upstream [email protected]:<repo_owrer>/<repo_name>.git (fetch)
upstream [email protected]:<repo_owner>/<repo_name>.git (Push)
pour tirer dans votre branche actuelle votre commande ressemblerait à ceci:
git pull upstream pull/<pull_request_number>/head
pour tirer dans une nouvelle branche, le code ressemblerait à ceci:
git fetch upstream pull/<pull_request_number>/head:newbranch
J'utilise hub, un outil de github: https://github.com/github/hub
Avec hub, vérifier une demande de retrait localement est un peu facile:
hub checkout https://github.com/owner/repo/pull/1234
or
hub pr checkout 1234