В обоих из следующих вопросов о StackOverflow принятый ответ описывает, как объединить изменения из разветвленного репозитория в ситуации, где Вы разветвляете repo, исходный repo изменяется, и затем Вы хотите объединить изменения, внесенные в основное ответвление назад в Ваш разветвленный repo.
Однако я не ясен о том, как Вы в курсе на неосновных ответвлениях в исходном repo, который Вы разветвили. Например, когда я первоначально разветвил репозиторий матрицы bitprophet, он содержал следующие ответвления:
Последние два ответвления больше не существуют, и теперь существует новое ответвление flexible-task-declarations
. Я выбрал, объединил и продвинул свое основное ответвление, так, чтобы ведущее устройство, источник/ведущее устройство и восходящий поток/ведущее устройство все имели тот же хеш SHA1 и указали на тот же снимок мерзавца. Однако я не уверен, как удалить ответвления, которые больше не существуют и обновляют новые ответвления так, чтобы мое ветвление было актуально. Я должен отследить каждое восходящее ответвление и затем выбрать, объединить и продвинуть каждое ответвление индивидуально, или есть ли лучший путь?
Для удаления веток, которые больше не существуют, я выполнил инструкции в ответе на вопрос StackOverflow Как удалить ветку в Git'е как локально, так и в Github'е? с помощью следующих команд:
$ git push origin :0.9-doc-rewrite
$ git push origin :path-and-#24
Для получения восходящего/0. В 9 ветках я сделал следующее:
$ git checkout --track origin/0.9
$ git fetch upstream
$ git merge upstream/0.9
$ git push
Не уверен, что это лучший способ обработки, но вот что я сделал:
$ git branch flexible-task-declarations upstream/flexible-task-declarations
Branch flexible-task-declarations set up to track remote branch flexible-task-declarations from upstream.
$ git checkout flexible-task-declarations
$ git push origin flexible-task-declarations
Чтобы подтвердить, что все ветки находятся на одном коммите:
$ git branch -av
Это покажет все ветки - локальные и удалённые - и покажет самое последнее сообщение коммита и SHA1 хэш.
A key difference between a Git fork, по сравнению с простым Git-клоном или SVN-кассой, это то, что ваша вилка никогда не будет держать себя в курсе с мастер-репо, если вы не сделаете этого. К счастью, есть простой инструмент, который поможет вам в этом. Ваша вилка отделена и равна мастеру в терминах Git'а, так что если вы хотите отслеживать изменения в мастере, вы можете создать отслеживающую ветку в вашем вилочном репо и сливать эти изменения в мастер-ветку вилки всякий раз, когда вы захотите что-то зафиксировать. Я настоятельно рекомендую GitHub - инструмент, который вы можете установить, чтобы легко отслеживать изменения в любом другом репозитории, связанном с вашим. См. текст README внизу этой страницы для установки и использования: http://github.com/defunkt/github-gem/tree/master
Ignore the Github Fork Queue It's evil! Очередь вил - это инструмент для мейнтейнеров, которые любят выбирать отдельные коммиты из участников, но не хотят сливаться во всей своей ветке. Если вы поиграете с очередью вил, вы испортите свою вилку (это можно исправить, прочтите "Что-то пошло не так"). Многие новички на github чувствуют, что они должны что-то делать с очередью вил, потому что там много, возможно, противоречивых изменений, и они не знают, какой способ поддерживать свою вилку в актуальном состоянии. Читайте "Держать вилку в актуальном состоянии" и узнайте об этом!
В проекте Django есть инструкции по работе с GithubCollaborate on Github, которые используют то, что кажется стандартным способом работы с вилкой и вытягиванием изменений вверх по потоку.
Долгое гостевое сообщение Nguyen под названием Настройка Git-репозиториев для проектов с открытым исходным кодом на GitHub в блоге Майкла Хартла описывает интересный метод настройки репозитория Github, который вы отбросили. Цели этого метода, согласно статье:
В основном, у вас есть 3 удалённых Git-репо тонны учесть:
Вы можете добавить upstream в качестве удаленного репо к вашему локальному.
git remote add upstream http://github.com/bitprophet/fabric.git
посмотрите на удалённые ветки
git branch -r
и нажмите (удалите) те, которые существуют в оригинале, но больше не существуют в исходном потоке
git push origin :anOldBranch
Затем
git remote prune origin
очистите ветки в вашем локальном repo (которые больше не существуют в оригинале, так как вы их только что удалили)
Ветки, которые существуют как в оригинале, так и в исходном потоке, также должны быть синхронизированы (перебазирование ваших локальных ветвей поверх тех, которые существуют в исходном потоке, перед тем, как переместить вашу работу в исходное состояние, может быть хорошим способом сделать очень простой запрос на перенаправление в исходное состояние)
: bitprophet будет иметь только быструю перемотку вперёд, чтобы включить вашу работу)
Не знаю, сможете ли вы иметь более простой процесс/команду/скрипт для синхронизации двух удалённых репозиториев.