2013-02-19 12 views
66

Chciałbym sklonować repozytorium z GitHub. Problem polega na tym, że nie chcę głównej gałęzi; Chcę wersję w this unapproved pull request.Klon GitHub z prośby o ściągnięcie?

Czy mogę sklonować wersję żądania pobrania zamiast głównego repozytorium?

+2

Jeśli tu nie przyszedł do 'clone' ale dla' fetch' patrz: http://stackoverflow.com/questions/6743514/git-how-can-i- Fetch-an-unmerged-pull-request-for-a-branch-i-dont-own –

+0

Przyszedłem tu po klon. W każdym razie dzięki. – Fresheyeball

Odpowiedz

50

można sklonować oddział chcesz za pomocą opcji w poleceniu git clone-b.

W twoim przypadku, oddział chcesz sklonować jest oddział źródłem wniosek końcówką (funkcja/mangusta-support):

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

Dzięki za podarowanie mi słodyczy. Otrzymujesz zielony czek, ale upvotes dla wszystkich, którzy pomogli! – Fresheyeball

0

Żądanie pobrania pokazuje zatwierdzenia z widelca tej osoby, dzięki czemu widać, że przesuwa on swoje zmiany z oddziału feature/mongoose-support.

można sklonować repozytorium i jego kasy tę gałąź

5

Gdy użytkownik składa wniosek ściągania, proszą o jakiś zmiany, które mają zostać scalone z gałęzi na ich klon widelca z powrotem do repozytorium innego użytkownika.

Dostępne zmiany można uzyskać ze źródła żądania wycią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 od (feature/mongoose-support).

+0

+1 za bycie prawym – Fresheyeball

12

Możesz śledzić instrukcje w this gist, aby móc bezpośrednio sprawdzić pilota, bez konieczności znajdowania jego repozytorium i oddziału.

Przykład użycia

Dla jednego z moich projektów (github3.py) Mam następujących w moim github3.py/.git/config

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

pierwszej jest to, co jest standardem dla każdego zdalnego z tą różnicą, że github zostaje zastąpione nazwą pilota. Oznacza to, że zdalne głowice (lub szefowie oddziałów na tym serwerze) są "mapowane" do lokalnych pilotów poprzedzonych prefiksem github/. Więc gdybym zrobił git fetch github i miał oddział na GitHub, który nie został jeszcze zauważony lokalnie na moim komputerze, to pobrałbym gałąź i mogłem zmienić to tak: git checkout -t github/branch_name.

Druga linia robi to samo, ale robi to dla żądań ściągania zamiast standardowych gałęzi git. Dlatego widzisz refs/pull/*/head. Pobiera on nagłówek każdego żądania ściągnięcia na GitHub i odwzorowuje go na github/pr/#. Tak więc jeśli ktoś wysyła żądanie ciągnącego i jest ponumerowana 62 (na przykład), to zrobić:

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

A potem będzie na lokalnym oddziale zwanym pr/62 (zakładając, że nie istnieje). Jest to miłe i oznacza, że ​​nie musisz śledzić pilotów ani oddziałów innych osób.

+0

niezbyt pomocna – Fresheyeball

+1

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

+0

Ponieważ jestem noobem, a ten dokument jest trudny do zrozumienia. Nigdy nie dostałbym od "nie dostania tego" do "git clone https://github.com/berstend/frappe.git -b feature/mangusta-support/my_clone" z głównego dokumentu. – Fresheyeball

61

Najprostszym sposobem na to jest tak:

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

Znajdziesz się na nowy oddział, który jest w stanie wniosek przeciwsobnym.

+29

Lepiej: 'git fetch origin pull/<#>/head: ' ([przez] (https://coderwall.com/p/z5rkga)) – schlamar

+1

Często odnosiłem się do tej odpowiedzi na SO, więc utknąłem to w mój plik '.gitconfig' w' [alias] ':' pr = "! f() {git fetch 1 $ pull/2 $/head: pull_ 2 $; git co pull_ $ 2;}; f" '. W ten sposób wpisuję 'git pr upstream 62', a następnie wiem, że jestem w nowej gałęzi PR # 62 z góry! Jeśli zawsze używasz 'origin', możesz go zakodować na twardym dysku zamiast' $ 1', ale to się dla mnie zmieni. –

+2

@matt --- więcej takich na https://gist.github.com/gnarf/5406589 – Chronial

2

Po zainstalowaniu git-extras

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

można po prostu użyć git pr

$ git pr 62 [remote] 
+0

Podoba mi się, git-dodatki to całkiem fajne – Fresheyeball

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

np

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

wprowadzić zmiany, popełnić je wcisnąć i otworzyć nowy PR od twoje za k na GitHub

+0

jak mogę scalić te oddziały lokalnie? Właśnie sklonowałem i pobrałem niezapisaną prośbę o ściągnięcie, jak powyżej. I wypróbowałem nazwę oddziału. Ale żadne zmiany nie pojawiają się w moim IDE/edytorze tekstu. – erginduran

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

How can I fetch an unmerged pull request for a branch I don't own?

+1

Uwaga 'git pull' tworzy scalenie w bieżącej gałęzi; zazwyczaj dla PR-a, który chciałbyś po prostu "git fetch" uzyskać oryginalny kod autora (jest wtedy dostępny jako FETCH_HEAD). Jeśli chcesz scalić, warto również wspomnieć o 'pull/2/merge' (zamiast' pull/2/head') - to sprawia, że ​​GitHub daje ci dokładne zatwierdzenie scalenia, które by się stało, gdybyś kliknął przycisk [Merge] . –

Powiązane problemy