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?
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?
Odpowiedzi:
Możesz sklonować gałąź, którą chcesz, używając -b
opcji 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
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
.
.gitconfig
pliku 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 62
i następną rzeczą, którą wiem, jest nowa gałąź PR # 62 od upstream! Jeśli zawsze używasz, origin
możesz zakodować go na stałe zamiast $1
, ale to zmienia się dla mnie.
co
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
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 github
jest 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 github
i 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.
git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_clone
głównego dokumentu.
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.
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?
git pull
tworzy połączenie z bieżącą gałęzią; zwykle w przypadku PR, które chcesz po prostu git fetch
uzyskać 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].
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
).
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]
Z oficjalnym nowym interfejsem wiersza poleceń Github :
gh repo clone org/repo
cd repo
gh pr checkout 44
gdzie 44
to numer PR, ale może to być również nazwa oddziału.
Zobacz dodatkowe szczegóły i opcje oraz instrukcje instalacji .
clone
abyfetch
zobaczyć: stackoverflow.com/questions/6743514/…