Клон GitHub из запроса на перенос?

128

Я хочу клонировать репозиторий с GitHub. Проблема в том, что мне не нужна основная ветка; Мне нужна версия в этом неутвержденном запросе на перенос .

Могу ли я клонировать версию запроса на перенос вместо основного репозитория?

Fresheyeball
источник
2
Если вы приехали сюда не для того, cloneа для того, чтобы fetchпосмотреть: stackoverflow.com/questions/6743514/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ответы:

87

Вы можете клонировать нужную ветку, используя -bопцию и запрос на вытягивание:

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

В вашем случае ветка, которую вы хотите клонировать, является исходной ветвью запроса на перенос ( feature/mongoose-support):

git clone https://github.com/berstend/frappe.git -b feature/mongoose-support ./mongoose-support
inancsevinc
источник
112

Самый простой способ сделать это так:

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

Теперь вы будете в новой ветке, которая находится в состоянии запроса на перенос.

Вы можете настроить псевдоним, запустив

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

Теперь вы можете проверить любой PR, запустив его git pr <pr_number>, или git pr <pr_number> <remote>если ваш пульт github не назван origin.

Chronial
источник
49
Лучше: git fetch origin pull/<#>/head:<local_branch_name>( через )
schlamar
5
Я обнаружил , что ссылки на этот SO ответ часто, так что я застрял это в мой .gitconfigфайл под [alias]: pr = "!f() { git fetch $1 pull/$2/head:pull_$2; git co pull_$2; }; f". Таким образом, я просто git pr upstream 62печатаю, и следующее, что я знаю, я нахожусь в новой ветви PR # 62 от апстрима! Если вы всегда используете, originвы можете жестко запрограммировать его вместо $1, но это меняет меня.
---
@matt, который предполагает, что у вас есть псевдоним для co
Майкл
43
git fetch origin refs/pull/PR_NUMBER/head:NEW_LOCAL_BRANCH

например:

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

Внесите изменения, зафиксируйте их, НАЖМИТЕ и откройте новый PR из вашей вилки на GitHub

wierzbiks
источник
как я могу объединить эти ветки локально? Я только что клонировал и получил не объединенный запрос на перенос, как вы это сделали. И попробовал название ветви оформления, но в моей IDE / текстовом редакторе никаких изменений не появилось.
erginduran
17

Вы можете следовать указаниям в этой сущности, чтобы иметь возможность проверить удаленный компьютер напрямую, не выясняя их репозиторий и ветвь.

Пример использования

Для одного из моих проектов (github3.py) у меня в моем 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

Первая строка - это то, что стандартно для каждого пульта, за исключением того, что githubзаменяется именем пульта. Это означает, что удаленные головы (или главы ветвей на этом сервере) «отображаются» на локальные пульты с префиксом github/. Так что, если я git fetch githubи имел филиал на GitHub , что не было уже заметили , локально на моей машине, было бы загрузить ветку , и я мог бы переключиться на него так: git checkout -t github/branch_name.

Вторая строка делает то же самое, но делает это для запросов на вытягивание вместо стандартных веток git. Вот почему вы видите refs/pull/*/head. Он извлекает заголовок каждого запроса на перенос на GitHub и сопоставляет его github/pr/#. Итак, если кто-то отправляет запрос на перенос, и он имеет номер 62 (например), вы должны сделать:

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

И тогда вы будете в локальной ветке с именем pr/62(при условии, что она еще не существует). Это приятно и означает, что вам не нужно отслеживать чужие пульты или ветки.

Ян Стэплтон Кордаско
источник
2
Почему нет? В нем объясняется, как это сделать удобным и эффективным способом.
Ян Стэплтон Кордаско
Потому что я новичок, и этот документ трудно понять. Я бы никогда не получил от " git clone https://github.com/berstend/frappe.git -b feature/mongoose-support /my_cloneнепонятного" документа по сути.
Fresheyeball
6
Что делает основной документ, так это добавляет дополнительный набор информации (ссылки или ссылки) для извлечения из GitHub. Когда вы это сделаете, git fetch githubвы сможете git co -t github/pr/#. Это избавляет вас от необходимости копировать и вставлять удаленный URL-адрес, вычислять имя ветки и т. Д. Вы получаете хорошо названные, лаконичные и точные имена веток без дополнительных хлопот. Но я понимаю, что это может показаться ошеломляющим.
Ян Стэплтон Кордаско
О, классно. Я этого +1 не знал! Вы можете дать мне полный пример?
Fresheyeball
@ sigmavirus24 большое спасибо за информацию; Интересно, существует ли подобный трюк для битбакета?
Петр Козелка
8
git clone git://github.com/dweldon/frappe
cd frappe
git pull origin pull/2/head

Как я могу получить не объединенный запрос на перенос для ветки, которой я не владею?

Стивен Пенни
источник
1
Note git pullсоздает слияние с текущей веткой; обычно для PR вам нужно просто git fetchполучить оригинальный авторский код (тогда он доступен как FETCH_HEAD). Если вы действительно хотите слияние, стоит также упомянуть pull/2/merge(вместо pull/2/head) - это заставляет GitHub предоставить вам точную фиксацию слияния, которая произойдет, если вы сейчас нажмете кнопку [Merge].
Бени Чернявский-Паскин
6

Когда пользователь отправляет запрос на перенос, он запрашивает слияние некоторых изменений из ветки на их клоне вилки обратно в репозиторий другого пользователя.

Желаемые изменения можно получить из источника запроса на перенос. Для этого клонируйте репозиторий пользователя ( git://github.com/berstend/frappe.git), а затем проверьте ветку, из которой он создал запрос на перенос ( feature/mongoose-support).

adrianbanks
источник
1

После установки git-extras

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

Вы можете просто использовать git pr

$ git pr 62 [remote]
megawac
источник
0

Этот запрос на перенос показывает коммиты из вилки этого человека, поэтому вы можете видеть, что он отправляет свои изменения из feature/mongoose-supportветки.

Вы можете клонировать его репозиторий и проверить эту ветку

Картик
источник
0

Для меня это было так просто, как

git fetch origin pull/4/head

Где 4здесь нашли:

введите описание изображения здесь

stevec
источник