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 ?
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 ?
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
.
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
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 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.