Klon GitHub z żądania ściągnięcia?


128

Chciałbym sklonować repozytorium z GitHub. Problem w tym, że nie chcę głównej gałęzi; Chcę wersję w tym niezatwierdzonym żądaniu ściągnięcia .

Czy mogę sklonować wersję żądania ściągnięcia zamiast głównego repozytorium?


2
Jeśli przyjechałeś tu nie po to, cloneaby fetchzobaczyć: stackoverflow.com/questions/6743514/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:


87

Możesz sklonować gałąź, którą chcesz, używając -bopcji i dla żądania ściągnięcia:

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

W twoim przypadku gałąź, którą chcesz sklonować, jest gałęzią źródłową żądania ściągnięcia ( feature/mongoose-support):

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

112

Najłatwiej to zrobić w ten sposób:

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

Będziesz teraz w nowej gałęzi, która jest w stanie żądania ściągnięcia.

Możesz skonfigurować alias, uruchamiając

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

Teraz możesz sprawdzić dowolny PR, uruchamiając git pr <pr_number>, lub git pr <pr_number> <remote>jeśli twój pilot github nie jest nazwany origin.


49
Lepiej: git fetch origin pull/<#>/head:<local_branch_name>( przez )
schlamar

5
Znalazłem się odniesienie to tak często odpowiedź, więc zatrzymany to do mojego .gitconfigpliku poniżej [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". W ten sposób po prostu piszę git pr upstream 62i następną rzeczą, którą wiem, jest nowa gałąź PR # 62 od upstream! Jeśli zawsze używasz, originmożesz zakodować go na stałe zamiast $1, ale to zmienia się dla mnie.
mat ---

@matt, który zakłada, że ​​masz alias do kasy o nazwieco
Michael McQuade

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

na przykład:

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

Wprowadź zmiany, zatwierdź je, PUSH i otwórz nowy PR ze swojego forka na GitHub


jak mogę lokalnie scalić te gałęzie? właśnie sklonowałem i pobrałem niescaloną prośbę o ściągnięcie, tak jak powyżej, i wypróbowałem nazwę gałęzi płatności, ale żadne zmiany nie pojawiają się w moim edytorze IDE / tekstu
erginduran

17

Możesz postępować zgodnie ze wskazówkami zawartymi w tym tekście, aby móc bezpośrednio sprawdzić pilota bez konieczności sprawdzania ich repozytorium i gałęzi.

Przykładowe użycie

Dla jednego z moich projektów (github3.py) mam następujące pliki w moim 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

Pierwsza linia jest standardem dla każdego pilota, z wyjątkiem tego, że githubjest zastępowana nazwą pilota. Oznacza to, że głowice zdalne (lub głowy oddziałów na tym serwerze) są „mapowane” na lokalne piloty z prefiksem github/. Więc gdybym to zrobił git fetch githubi miał gałąź na GitHubie, która nie była jeszcze zauważona lokalnie na moim komputerze, ściągnęłaby gałąź i mógłbym się na nią przełączyć w następujący sposób:git checkout -t github/branch_name .

Druga linia robi to samo, ale robi to dla żądań ściągnięcia zamiast standardowych gałęzi git. Dlatego widzisz refs/pull/*/head. Pobiera nagłówek każdego żądania ściągnięcia w GitHub i mapuje go na github/pr/#. Więc jeśli ktoś wyśle ​​żądanie ściągnięcia i ma numer 62 (na przykład), zrobiłbyś:

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

A potem byłbyś w lokalnym oddziale o nazwie pr/62(zakładając, że jeszcze nie istniał). Jest fajny i oznacza, że ​​nie musisz śledzić pilotów ani oddziałów innych osób.


2
Dlaczego nie? Wyjaśnia dokładnie, jak to zrobić w wygodny i skuteczny sposób.
Ian Stapleton Cordasco,

Ponieważ jestem noobem, a ten dokument jest trudny do zrozumienia. Nigdy nie przeszedłbym od „nie rozumienia” do git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clonegłównego dokumentu.
Fresheyeball

6
To, co robi główny dokument, to dodanie dodatkowego zestawu informacji (referencji lub referencji) do pobrania z GitHub. Kiedy to zrobisz git fetch github, możesz to zrobić git co -t github/pr/#. Zapobiega to konieczności kopiowania i wklejania zdalnego adresu URL, ustalania nazwy gałęzi itp. Dzięki temu uzyskujesz dobrze nazwane, zwięzłe i dokładne nazwy gałęzi bez dodatkowych kłopotów. Ale rozumiem, że może się to wydawać przytłaczające.
Ian Stapleton Cordasco,

Och, fajnie. Nie wiedziałem, że to +1! Czy możesz podać mi w pełni kwalifikowany przykład?
Fresheyeball

@ sigmavirus24 wielkie dzięki za informację; Zastanawiam się, czy podobna sztuczka istnieje dla bitbucketa?
Petr Kozelka

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

Jak mogę pobrać niescalone żądanie ściągnięcia dla gałęzi, której nie jestem właścicielem?


1
Note git pulltworzy połączenie z bieżącą gałęzią; zwykle w przypadku PR, które chcesz po prostu git fetchuzyskać oryginalny kod autora (jest on wtedy dostępny jako FETCH_HEAD). Jeśli chcesz scalić, warto również wspomnieć pull/2/merge(zamiast pull/2/head) - to sprawia, że ​​GitHub daje ci dokładne zatwierdzenie scalania, które miałoby miejsce, gdybyś teraz kliknął przycisk [Merge].
Beni Cherniavsky-Paskin

6

Gdy użytkownik przesyła żądanie ściągnięcia, prosi o scalenie niektórych zmian z gałęzi w ich klonie rozwidlenia z powrotem do repozytorium innego użytkownika.

Żądane zmiany można pobrać ze źródła żądania ściągnięcia. Aby to zrobić, sklonuj repozytorium użytkownika ( git://github.com/berstend/frappe.git), a następnie sprawdź gałąź, z której utworzył żądanie ściągnięcia ( feature/mongoose-support).


1

Po zainstalowaniu git-extras

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

Możesz po prostu użyć git pr

$ git pr 62 [remote]


0

To żądanie pull pokazuje zatwierdzenia z forka tej osoby, dzięki czemu możesz zobaczyć, że wypycha swoje zmiany z feature/mongoose-support gałęzi.

Możesz sklonować jego repozytorium i pobrać tę gałąź


0

Dla mnie to było tak proste, jak

git fetch origin pull/4/head

Gdzie 4został znaleziony:

wprowadź opis obrazu tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.