Git. Работа с удалёнными репозиториями

git-90x90В моём предыдущем посте я обрисовал проблему, и некое решение. Всё получилось довольно сумбурно, и изложение проблемы, и её решение. Прошла пара дней и я понял как у белых людей принято решать мою проблему. Для этого заводят таки отдельную репозиторию (fork) и делают предыдущую репу апстримом.

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

Тут я себе положил шпаргалку на будущее, как настроить это всё хозяйство и как с ним управляться

Зачем это надо
==================
Ещё раз обрисую проблему. Есть некий родительский проект, и есть дочерние, основанные на родительском коде.

  • Нужно транслировать хотфиксы из родительского в дочерние проекты
  • Изменения в дочерних проектах должны быть изолированными
  • Хранить все изменения в Git

HOWTO
==========================

Сначала создаём дочерний репозиторий. На github можно форкнуть. Однако замечено что нельзя делать форк своего же собственного репозитория. В таком случае просто создаётся пустой репозиторий, и выполняются для обычные для новой репы действия:

$ touch README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git remote add origin __ваш_новый_репозиторий__
$ git push -u origin master

Далее привязываемся к родительскому репозиторию

$ git remote add upstream __ваш_родительский_репозиторий__

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

Вот и всё! Работаем как и прежде. А иногда, если надо выдернуть изменения из родительской репы, делаем так:

$ git fetch upstream
$ git merge upstream/master
$ git push 

Кстати в данном примере слово upstream — это пользовательское название для родительской репы. При наличии фантазии можно назвать как-нибудь по-другому.

Ссылки по теме
===============================