Отслеживайте чье-то GitHub репо в ветке - PullRequest
3 голосов
/ 06 мая 2010

Я довольно новичок в Git, и мне пока очень нравится, но я не уверен, что здесь делать.

Я разбудил проект github и в настоящее время занимаюсь переносом его на другой язык. Для справки, я создал ветку кода, как это было, когда я делал форк. Моя проблема сейчас в том, что исходный проект был обновлен, и я не могу понять, как перенести эти изменения в мою ветку из исходного мастера (потому что «origin» указывает на мой проект github).

Дополнительный вопрос для моего собственного образования: какую команду должен выполнить владелец исходного проекта, чтобы перенести изменение из моей ветви в свою основную ветку?

РЕДАКТИРОВАТЬ: Эти ответы работают, когда я запускаю их из своей собственной «основной» ветви, но не когда я запускаю их из своей «отслеживающей» ветви (здесь я использую термин свободно, потому что знаю команду git команды то же имя. Не уверен, что он делает, хотя).

Когда я в своей ветке, не являющейся мастером, и запускаю git fetch upstream, ничего не происходит. Когда я пытаюсь git fetch upstream:master, он говорит

ssh: upstream: no address associated with name
fatal: The remote end hung up unexpectedly

Ответы [ 4 ]

3 голосов
/ 06 мая 2010

Вы можете добавить исходное репо, используя git remote:

$ git remote add upstream http://github.com/user/repo.git

(Вы можете назвать это как-нибудь иначе, чем upstream, если хотите, но это имя вы будете использовать для обозначения пульта.)

Чтобы получить обновления, просто запустите:

$ git fetch upstream

Чтобы передать изменения из вашего репо в репозиторий восходящего направления, сопровождающий должен добавить ваше репо как удаленное, а затем извлечь изменения:

$ git remote add drhorrible http://github.com/youruser/yourrrepo.git
$ git pull drhorrible your-branch:master

Или, если сопровождающий не хочет добавлять ваше хранилище в качестве удаленного, он может ссылаться на него напрямую:

$ git pull http://github.com/youruser/yourrepo.git your-branch:master
1 голос
/ 06 мая 2010

Вы можете добавить его в свой список удаленных репозиториев и получить / извлечь из него

$ git remote add first-repo-name git://github.com/first-repo-name/repo.git
$ git fetch first-repo-name
# or:
$ git pull first-repo-name

git pull фактически объединит главную ветвь с именем первого репо с вашей основной ветвью (если вы в данный момент находитесь в этой ветке)

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

На стороне GitHub это будет не фактическая команда, а результат запроса на получение , который вы бы инициировали.

альтернативный текст http://img.skitch.com/20080223-1njj3f5559un2eyt51j92t2xkf.png

Технически, он мог бы добавить ваше разветвленное репо в качестве удаленного репо в своем локальном репо (как вы сделали выше), но если его репо сильно разветвлено, это становится непрактичным, следовательно, центральный механизм "запросов на извлечение". 1020 *

0 голосов
/ 23 июня 2010

Справка по разветвлению в Github объясняет это очень хорошо:

http://help.github.com/forking/

0 голосов
/ 07 мая 2010

Предполагается, что Git работает так: вы переносите изменения из своего источника (будь то разветвленный репо или оригинал) в своего локального мастера. Затем вы можете использовать git-merge или git-rebase, чтобы получить их в вашей локальной ветке. Как только вы довольны результатом, вы можете вернуться к пульту.

Я думаю, из того, как вы задали вопрос, вам лучше использовать git-rebase, чтобы перебазировать вашу ветку на мастер после того, как вы извлекли изменения из исходного репо.

Если вы попытаетесь сделать все это из командной строки, вам нужно будет изучить git-cherry. В противном случае такие инструменты, как gitx или gitk, очень полезны для выбора коммитов, которые вы хотите объединить.

...