2013-01-21 3 views
6

У меня есть два тесно связанных проекта (A и B), которые содержат некоторый исходный код (S). Оба они будут выпущены в одно и то же время, и выпущенная версия должна всегда использовать одну и ту же версию общего кода. Общий код S будет изменяться достаточно часто.Обмен кодом между двумя проектами в git

Таким образом, это будет выглядеть где-то так:

  • Вариант 1 использует S версии 1
  • B версия 1 использует S версия 1
  • Вариант 2 использует S версии 2
  • B версия 2 использует S-версию 2

Каков наилучший способ справиться с этим с помощью git (и/или некоторых инструментов, которые используют git)?

Вот мои проблемы:

  • Проект A и B проекта должны быть в отдельных хранилищах (они связаны между собой, но я не хочу, чтобы иметь свободный поток кода между ними)
  • Если общий код, обновленный в одном проекте, должен быть автоматически обновлен в другом (я не хочу иметь ситуацию, когда разработчик забыл что-то сделать и в итоге получил устаревшую версию общего кода).

Как я понимаю, одним из канонических ответов является «использование git submodule». Тем не менее, я прочитал около criticism об этом подходе. Я чувствовал, что он больше предназначен для обмена библиотеками, которые редко меняются.

Другой подход, который я прочитал использовал git subtree

И есть несколько менее популярных подходов: Repo, GitSlave

Что бы наилучший подход к работе с данным типом обмена кодом?

+0

ссылки не являются хорошими, я исправил поддерево, но не могу угадать других (используйте god-подмодуль и критику) – CharlesB

+0

Спасибо. Я исправил все ссылки, кроме одного. Если я его вставляю, по какой-то причине он связан с неправильной ссылкой. –

+0

Вы можете исправить это непосредственно в код уценки – CharlesB

ответ

3

Очень простым решением было бы использовать три хранилища: A, B и S. Репозитории проектов A и B проверили бы свои Make-файлы, чтобы убедиться, что разработчик использует последний код, нажатый в репозиторий, например

check: 
     git fetch /path/to/S master:tip 
     git branch --contains tip | grep -q master 

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

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

Смежные вопросы