Проект на GitHub, який у мене є fork of, має нові запити на потяг, які я хочу втягнути у свою вилку, яку автор ще не втягнув.
Чи є простий спосіб застосувати запит на тягу з інших вил до моєї вилки? Чи є ще щось, чого я пропускаю?
Проект на GitHub, який у мене є fork of, має нові запити на потяг, які я хочу втягнути у свою вилку, яку автор ще не втягнув.
Чи є простий спосіб застосувати запит на тягу з інших вил до моєї вилки? Чи є ще щось, чого я пропускаю?
Відповіді:
Ви можете зробити це вручну досить легко:
додайте іншу вилку як віддалену частину репо:
git remote add otherfork git://github.com/request-author/project.git
зафіксуйте свої репо-зобов'язання
git fetch otherfork
Тоді у вас є два варіанти застосувати запит на витягнення (якщо ви не хочете вибрати вибір 1.)
Якщо вам не важливо застосовувати також можливі комітети, додані між початковим запитом та запитом на виклик, ви можете просто відновити гілку, на якій формувався запит на виклик
git rebase master otherfork/pullrequest-branch
Якщо ви хочете, щоб коміти в запиті на виклик, ідентифікуйте їх SHA1 і виконайте
git cherry-pick <first-SHA1> <second-SHA1> <etc.>
git pull URL branchname
Ви також можете це зробити на веб-сторінці github.
Я припускаю, ви вже повинні мати fork ( MyFork
) загальної репо ( BaseRepo
), який має очікуваний запит на витяг з вилки ( OtherFork
), який вас цікавить.
OtherFork
), яка ініціювала запит на тягу, який ви хочете отримати у вашу вилку ( MyFork
)OtherFork
OtherFork
гілку. Виберіть ліворуч як базову вилку ( MyFork
) ( ВАЖЛИВО ).View pull request
слід змінити на Create pull request
. Натисніть це.Тепер у вашого fork ( MyFork
) має бути відкладений запит на витяг , який ви можете просто прийняти.
OtherFork
правою рукою спадне меню "Порівняти". Потім я вибрав ліву частину як базову виделку, як описано вище, як міг створити запит на тягу.
Як раніше говорив Tekkub, ви можете просто потягнути гілку безпосередньо. Більшу частину часу з GitHub, відділення просто "майстер" на запиті вилки користувача проекту.
Приклад: git pull https://github.com/USER/PROJECT/ BRANCH
І як прикладний приклад:
Скажіть, що ви розіграли проект github, який називається сафарікниги, і в початковому проекті є наступний запит на тягу, який ви хочете помістити у вашу вилку:
Потім у папці клонованого проекту вашої вилки запустіть:
git pull https://github.com/fermionic/safaribooks.git fix-str-decode
git pull https://github.com/{upstream/project} refs/pull/{id}/head
натомість.
Запити на проект можуть надходити від багатьох авторів (вилок), і ви, мабуть, не хочете окремого дистанційного для кожного вила. Крім того, ви не хочете робити жодних припущень щодо гілки, яку автор використовував під час подання запиту на виклик, або що ще може бути у головній гілці автора. Тому краще посилатися на запит на витяг, як він відображається у сховищі вище, ніж як в інших виделках.
Крок 1:
git remote add upstream <url>
Ви, ймовірно, вже зробили цей крок, але якщо ні, то вам потрібно буде визначити віддалений проект вище за течією. URL-адреса - це клонова URL-адреса проекту, який ви розщелили. Додаткову інформацію можна отримати в розділі Налаштування пульта для вилки та синхронізація виделки . upstream
- це ім'я, яке ви даєте віддаленому користувачеві, і хоча воно може бути чим завгодно, upstream
це звичайне ім'я.
Крок 2:
git pull upstream refs/pull/{id}/head
... де {id}
номер запиту на витяг. upstream
це ім'я пульта, з якого слід витягнути, тобто просто "вище за течією", якщо ви точно дотримувались кроку 1. Це також може бути URL-адреса, і в цьому випадку ви можете пропустити крок 1.
Крок 3:
Введіть повідомлення про фіксацію для об'єднання. Ви можете зберегти за замовчуванням, хоча я рекомендую дати хороший однорядковий підсумок із номером запиту на витяг, проблемою, яку він виправляє, та коротким описом:
Merge PR#42, fixing VIM-652, support for mapping arbitrary IDEA actions
git pull upstream refs/pull/{id}/head
комісіями у вашому місцевому репо, а потім посилатися на них як FETCH_HEAD
(наприклад, git log ..FETCH_HEAD
щоб побачити, що тут, то git merge FETCH_HEAD
)
Деякі детальніші відомості, які працювали на мене.
Мій .git / config файл для роздвоєного репо виглядає так:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = git@github.com:litzinger/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "source"]
url = git://github.com/revolunet/angular-carousel.git
fetch = +refs/heads/*:refs/remotes/source/*
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
Потім запустіть "git fetch source", де потім перераховані всі запити на витяг із роздвоєного репо.
* [new ref] refs/pull/54/head -> origin/pr/54
* [new ref] refs/pull/67/head -> origin/pr/67
* [new ref] refs/pull/69/head -> origin/pr/69
* [new ref] refs/pull/71/head -> origin/pr/71
А потім для об'єднання в конкретний запит на потягнення запустіть "git merge master origin / pr / 67"
refs/pull/
простору імен .
smartgit.branch.otherRefs=notes;pull
до smartgit.properties відповідно до syntevo.com/doc/display/SG/System+Properties - ви також можете об'єднати їх звідти .
Що я б робив, це наступне;
git checkout master
git remote add #NAME# #ADDRESS TO REPO#
git fetch #USERNAME#
git checkout -b test_fork
git rebase #NAME#/#BRANCH#
Зараз я об'єднав зміни в тестову гілку, названу test_fork
. Так що будь-які зміни не забруднить моє дерево.
За бажанням ви можете використовувати вишню, як описано вище, для вибору конкретного комітету, якщо це є більш кращим.
Щасливих подорожей :)
Для цього я використовую зручний сценарій денді. Я запускаю сценарій, ввівши:
git prfetch upstream
і він отримує всі запити на витяг з вилки вище.
Для створення сценарію зробіть файл ~/bin/git-prfetch
.
Файл повинен містити наступне:
#!/bin/bash
if [ -z "$1" ]; then
echo "Please supply the name of a remote to get pull requests from."
exit 1
fi
git fetch $1 +refs/heads/\*:refs/remotes/$1/\* +refs/pull/\*/head:refs/remotes/$1/pr/\*
Переконайтеся, що ваш шлях включає сценарій, встановивши:
export PATH="$HOME/bin:$PATH"
Ви можете додати цей файл, щоб ~/.bashrc
зміни були постійними.
Тепер переконайтеся, що ви додали виделку, з якої хочете отримати запити на витяг:
git remote add upstream https://github.com/user/repo.git
І потім
git prfetch upstream