GitHub-Klon von Pull-Anfrage?


128

Ich möchte ein Repository von GitHub klonen. Das Problem ist, ich möchte nicht den Hauptzweig; Ich möchte die Version in dieser nicht genehmigten Pull-Anfrage .

Kann ich die Pull-Request-Version anstelle des Haupt-Repositorys klonen?


2
Wenn Sie nicht hierher gekommen sind, clonesondern um zu fetchsehen: stackoverflow.com/questions/6743514/…
Ciro Santilli 2 冠状 病 六四 六四 2

Antworten:


87

Sie können den gewünschten Zweig klonen, indem Sie die -bOption und die Pull-Anforderung verwenden:

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

In Ihrem Fall ist der Zweig, den Sie klonen möchten, der Quellzweig der Pull-Anforderung ( feature/mongoose-support):

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

112

Der einfachste Weg, dies zu tun, ist folgender:

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

Sie befinden sich jetzt in einem neuen Zweig, der sich im Status der Pull-Anforderung befindet.

Möglicherweise möchten Sie einen Alias ​​einrichten, indem Sie ausführen

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

Jetzt können Sie jede PR auschecken, indem Sie sie ausführen git pr <pr_number>oder git pr <pr_number> <remote>wenn Ihre Github-Fernbedienung nicht benannt ist origin.


49
Besser: git fetch origin pull/<#>/head:<local_branch_name>( via )
schlamar

5
Ich fand ich diese SO Antwort oft referenzieren, so dass ich dies in meine stecken .gitconfigDatei unter [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". Auf diese Weise tippe ich einfach git pr upstream 62und als nächstes bin ich in einem neuen Zweig von PR # 62 von Upstream! Wenn Sie immer verwenden, können originSie es anstelle von fest codieren $1, aber das ändert sich für mich.
Matt ---

@ Matt, der davon ausgeht, dass Sie einen Alias ​​für die Kasse mit dem Namenco
Michael McQuade

43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

z.B:

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

Nehmen Sie Änderungen vor, übernehmen Sie sie, drücken Sie und öffnen Sie neue PR von Ihrer Gabel auf GitHub


Wie kann ich diese Zweige lokal zusammenführen? Ich habe gerade wie oben beschrieben eine nicht zusammengeführte Pull-Anfrage geklont und abgerufen.
Erginduran

17

Sie können den Anweisungen in dieser Übersicht folgen , um die Fernbedienung direkt auschecken zu können, ohne das Repository und den Zweig herausfinden zu müssen.

Anwendungsbeispiel

Für eines meiner Projekte (github3.py) habe ich folgendes in meinem 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

Die erste Zeile ist Standard für jede Fernbedienung, mit der Ausnahme, dass githubsie durch den Namen der Fernbedienung ersetzt wird. Dies bedeutet, dass Remote-Köpfe (oder die Köpfe von Zweigen auf diesem Server) lokalen Fernbedienungen "zugeordnet" werden, denen ein Präfix vorangestellt ist github/. Wenn ich also git fetch githubeinen Zweig auf GitHub hätte, der lokal auf meinem Computer noch nicht bemerkt wurde, würde er den Zweig herunterladen und ich könnte wie folgt zu ihm wechseln : git checkout -t github/branch_name.

Die zweite Zeile macht dasselbe, aber sie macht es für Pull-Anfragen anstelle von Standard-Git-Zweigen. Deshalb siehst du refs/pull/*/head. Es holt den Kopf jeder Pull-Anfrage auf GitHub und ordnet ihn zu github/pr/#. Wenn also jemand eine Pull-Anfrage sendet und diese beispielsweise mit 62 nummeriert ist, würden Sie Folgendes tun:

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

Und dann wären Sie in einer lokalen Niederlassung namens pr/62(vorausgesetzt, sie existiert noch nicht). Es ist schön und bedeutet, dass Sie nicht die Fernbedienungen oder Zweige anderer Leute im Auge behalten müssen.


2
Warum nicht? Es wird genau erklärt, wie dies auf bequeme und effiziente Weise geschieht.
Ian Stapleton Cordasco

Weil ich ein Noob bin und dieses Dokument schwer zu verstehen ist. Ich wäre nie von "nicht bekommen" zu git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clonedem Hauptdokument gekommen.
Fresheyeball

6
Das Hauptdokument fügt einen zusätzlichen Satz von Informationen (Verweise oder Verweise) hinzu, die von GitHub abgerufen werden sollen. Wenn Sie dies tun git fetch github, können Sie es dann tun git co -t github/pr/#. Auf diese Weise müssen Sie die Remote-URL nicht kopieren und einfügen, den Filialnamen ermitteln usw. Sie erhalten dann ohne zusätzlichen Aufwand gut benannte, präzise und genaue Filialnamen. Aber ich verstehe, dass es überwältigend erscheinen mag.
Ian Stapleton Cordasco

Oh schön. Ich wusste das nicht +1! Können Sie mir ein voll qualifiziertes Beispiel geben?
Fresheyeball

@ sigmavirus24 vielen Dank für die Informationen; Ich frage mich, ob es einen ähnlichen Trick für Bitbucket gibt.
Petr Kozelka

8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

Wie kann ich eine nicht zusammengeführte Pull-Anfrage für einen Zweig abrufen, den ich nicht besitze?


1
Hinweis git pullerstellt eine Zusammenführung in den aktuellen Zweig. Normalerweise möchten Sie für eine PR nur git fetchden Code des Originalautors erhalten (dieser ist dann als FETCH_HEAD zugänglich). Wenn Sie eine Zusammenführung wünschen, ist es auch erwähnenswert pull/2/merge(anstelle von pull/2/head) - dies gibt GitHub die genaue Zusammenführungszusage, die passieren würde, wenn Sie jetzt auf die Schaltfläche [Zusammenführen] klicken würden.
Beni Cherniavsky-Paskin

6

Wenn ein Benutzer eine Pull-Anforderung sendet, fordert er an, dass einige Änderungen von einem Zweig auf seinem Klon eines Forks wieder in das Repository eines anderen Benutzers übernommen werden.

Die gewünschten Änderungen können von der Quelle der Pull-Anforderung abgerufen werden. Klonen Sie dazu das Repository des Benutzers ( git://github.com/berstend/frappe.git) und überprüfen Sie den Zweig, von dem er die Pull-Anforderung erstellt hat ( feature/mongoose-support).


1

Nach der Installation von Git-Extras

(cd /tmp && git clone --depth 1 https://github.com/tj/git-extras.git && cd git-extras && sudo make install)

Sie können einfach verwenden git pr

$ git pr 62 [remote]


0

Diese Pull-Anforderung zeigt die Commits von der Gabel dieser Person an, sodass Sie sehen können, dass sie ihre Änderungen aus dem feature/mongoose-supportZweig überträgt.

Sie können sein Repository klonen und diesen Zweig auschecken


0

Für mich war es so einfach wie

git fetch origin pull/4/head

Wo 4wurde hier gefunden:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.