Comment puis-je récupérer une requête de tirage non fusionnée pour une twig que je ne possède pas?

Je dois saisir une requête de tirage spécifique (qui n’a pas encore été traitée dans le stream principal) dans le référentiel NServiceBus:

https://github.com/johnsimons/NServiceBus/commit/d8524d53094e8181716e771c1023e968132abc15

Ce n’est évidemment pas mon repo, mais j’ai besoin des changements qui existent dans cette requête pull.

Quelle est la meilleure façon de procéder?

Pour récupérer un extrait dans votre référentiel:

git fetch git@github.com:jboss/jboss-common-beans.git refs/pull/4/head 

Faites ensuite ce que vous voulez avec FETCH_HEAD:

 git checkout -b new-branch FETCH_HEAD 
 git pull origin pull/28/head 

Ou

 git fetch origin pull/28/head:28 git checkout 28 

Puis-je extraire une demande d’extraction non encore fusionnée?

Tu peux le faire:

1) Ajouter la télécommande en amont:

 git remote add upstream git@github.com:Particular/NServiceBus.git 

2) Après cela, vous pouvez extraire toute demande de tirage vers une nouvelle twig par son identifiant:

 git fetch upstream pull/PULL_REQUEST_ID/head:NEW_BRANCH_NAME 

Ensuite, vous aurez une twig nommée NEW_BRANCH_NAME contenant le code PR.

Ajouter un alias:

Si vous le faites aussi souvent que moi, vous souhaiterez peut-être configurer certains alias pour cela. J’ai ceci dans mon .gitconfig:

 [alias] fetch-pr = "!f(){\ [ -z \"$1\" ] && { echo Usage: git fetch-pr PULL_REQUEST_ID [REMOTE_NAME] [NEW_BRANCH_NAME]; exit 1; }; \ remote=${2:-origin}; \ branch=${3:-pr-$1}; \ git fetch $remote \"pull/$1/head:$branch\"; \ }; f " pr = "!f(){\ branch=${3:-pr-$1}; \ git fetch-pr \"$@\"; \ git switch $branch; \ }; f " 

Avec ce qui précède, je peux faire:

 git fetch-pr 123 # fetch PR #123 into branch pr-123 git fetch-pr 123 some-branch # fetch PR #123 into some-branch git pr 123 # fetch and switch to the branch 

Pour les situations difficiles (en particulier si vous n’avez pas de git-repo extrait), le moyen le plus simple est d’appliquer un patch. Pour cela, ouvrez simplement la requête pull sur github et ajoutez un “.patch” à l’URL, téléchargez-le et appliquez le patch.

Exemple:

 cd cordova-plugin-media wget https://github.com/apache/cordova-plugin-media/pull/120.patch patch -p1 < 120.patch 

github / hub

https://github.com/github/hub est un assistant CLI GitHub qui traite ce cas et d’autres cas d’utilisation en utilisant des informations supplémentaires provenant de l’API GitHub. Par exemple:

 git clone https://github.com/github/hub # Just copy paste the URL. hub checkout https://github.com/github/hub/pull/970 

Résultat:

  • nous sums maintenant sur une twig appelée - qui contient le PR.

    Notez le nom de la bonne twig qui a été automatiquement défini pour nous.

  • cette twig est définie pour suivre la twig d’origine sur le fork, c’est-à-dire que .git/config contient:

     [branch "-"] remote = retronym merge = refs/heads/ticket/969 rebase = true 

    Donc, si d’autres commits sont poussés, nous pouvons les git fetch directement.

L’installation d’un hub sous Linux est actuellement pénible si vous ne connaissez pas Go, mais cela en vaut la peine. Sur Ubuntu 14.04, le repository sur les référentiels est trop ancien, donc GVM est la meilleure option:

 bash < <(curl -LSs 'https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer') . "$HOME/.gvm/scripts/gvm" gvm install 'go1.4' gvm use 'go1.4' --default go get github.com/github/hub 

J'ai également demandé à GitHub de nous donner une feuille de cheats sur l'interface Web à l' adresse suivante : https://github.com/isaacs/github/issues/449

Une fois que vous avez ajouté le référentiel amont en tant que distant amont (comme @elias l’a souligné):

 $ git remote add upstream git@github.com:Particular/NServiceBus 

Vous pouvez configurer git pour récupérer les demandes d’extraction par défaut:

 $ git config --local --add remote.upstream.fetch '+refs/pull/*/head:refs/remotes/upstream/pr/*' 

Alors, allons le chercher:

 $ git fetch upstream Fetching upstream 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/Particular/NServiceBus * [new ref] refs/pull/1/head -> upstream/pr/1 * [new ref] refs/pull/2/head -> upstream/pr/2 

Et le vérifier:

 $ git checkout pr/2 Branch pr/2 set up to track remote branch pr/2 from upstream. Switched to a new branch 'pr/2' 

ci-dessous est de faire votre commande ‘git fetch’ pour récupérer toutes les requêtes de tirage lors de l’exécution de “git fetch”

ajoutez ci-dessous dans ~ / .gitconfig

 [remote "origin"] fetch = +refs/pull-requests/*/from:refs/remotes/origin/pr/* 

notez que la référence “refs / pull-retrait /” a la convention de dénomination stash, pour le hub git, vous pouvez avoir besoin d’un format différent