198 votes

Clone de GitHub à partir d'une demande de retrait ?

Je voudrais cloner un dépôt de GitHub. Le problème est que je ne veux pas la branche principale ; je veux la version dans cette demande non approuvée .

Est-il possible pour moi de cloner la version de la demande de pull au lieu du dépôt principal ?

181voto

Chronial Points 15402

La façon la plus simple de le faire est la suivante :

git fetch origin pull/2/head
git checkout -b pullrequest FETCH_HEAD

Vous serez maintenant sur une nouvelle branche qui est sur l'état de la demande de pull.

Vous pourriez vouloir mettre en place un alias en exécutant

git config --global alias.pr '!f() { git fetch -fu ${2:-origin} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f'

Maintenant, vous pouvez vérifier n'importe quel PR en exécutant git pr <pr_number> o git pr <pr_number> <remote> si votre télécommande github n'est pas nommée origin .

113voto

inancsevinc Points 411

Vous pouvez cloner la branche que vous voulez en utilisant la commande -b et pour la demande de pull :

git clone https://github.com/user_name/repo_name.git -b feature/pull_request_name dir_name

Dans votre cas, la branche que vous voulez cloner est la branche source de la demande de pull ( feature/mongoose-support ):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support

55voto

wierzbiks Points 11
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

eg :

git fetch origin pull/611/head:pull_611
git checkout pull_611

Effectuez des modifications, commutez-les, PUSH et ouvrez un nouveau PR depuis votre fork sur GitHub.

20voto

Steven Penny Points 18523
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

Comment puis-je récupérer une demande de retrait non fusionnée pour une branche qui ne m'appartient pas ?

18voto

sigmavirus24 Points 4768

Vous pouvez suivre les instructions dans cette phrase pour pouvoir extraire directement la télécommande sans avoir à connaître son dépôt et sa branche.

Exemple d'utilisation

Pour l'un de mes projets (github3.py), j'ai ce qui suit dans mon fichier github3.py/.git/config

[remote "github"]
    fetch = +refs/heads/*:refs/remotes/github/*
    fetch = +refs/pull/*/head:refs/remotes/github/pr/*
    url = git@github.com:sigmavirus24/github3.py

La première ligne est ce qui est standard pour chaque télécommande à l'exception du fait que github est remplacé par le nom de la télécommande. Ce que cela signifie, c'est que les têtes distantes (ou les têtes des branches sur ce serveur) sont "mappées" sur des remotes locaux préfixés par github/ . Donc si je l'ai fait git fetch github et avait une branche sur GitHub qui n'était pas déjà remarquée localement sur ma machine, il téléchargerait la branche et je pourrais y passer comme suit : git checkout -t github/branch_name .

La deuxième ligne fait la même chose, mais elle le fait pour les demandes de pull au lieu des branches git standard. C'est pourquoi vous voyez refs/pull/*/head . Il récupère l'en-tête de chaque demande de pull sur GitHub et le fait correspondre à l'en-tête de la demande de pull. github/pr/# . Ainsi, si quelqu'un envoie une demande de pull et qu'elle porte le numéro 62 (par exemple), vous ferez ce qui suit :

git fetch github
git checkout -t github/pr/62

Et ensuite vous seriez sur une branche locale appelée pr/62 (en supposant qu'il n'existe pas déjà). C'est agréable et cela signifie que vous n'avez pas à suivre les télécommandes ou les branches des autres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X