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?
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?
Antworten:
Sie können den gewünschten Zweig klonen, indem Sie die -b
Option 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
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
.
.gitconfig
Datei 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 62
und als nächstes bin ich in einem neuen Zweig von PR # 62 von Upstream! Wenn Sie immer verwenden, können origin
Sie es anstelle von fest codieren $1
, aber das ändert sich für mich.
co
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
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 github
sie 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 github
einen 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.
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
dem Hauptdokument gekommen.
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.
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head
git pull
erstellt eine Zusammenführung in den aktuellen Zweig. Normalerweise möchten Sie für eine PR nur git fetch
den 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.
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
).
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]
Mit der offiziellen neuen Befehlszeilenschnittstelle von Github :
gh repo clone org/repo
cd repo
gh pr checkout 44
Wo 44
ist die PR-Nummer, kann aber auch der Filialname sein.
Weitere Details und Optionen sowie Installationsanweisungen finden Sie hier .
clone
sondern um zufetch
sehen: stackoverflow.com/questions/6743514/…