Git рабочий процесс подмодулей

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

В предыдущих проектах я вручную копировал зависимости в рабочем дереве Git, добавляя небольшую версию, определяющую версию, которую я использую.

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

Я решил попробовать подмодули Git для управления. Чем больше я их пытаюсь, тем больше разочаровываю. Кажется, что ручная копия, возможно, лучше.

Вот некоторые из моих проблем:

  • Мы больше не можем получать согласованное состояние репозитория с помощью одной команды (git checkout теперь требуется git submodule update --init).
  • Мы не можем использовать некоторые из инструментов Git правильно (git archive является самым заметным).
  • Мы не можем видеть изменения/различия статуса в подмодулях из основного проекта.
  • Как я только что нашел, git submodule не работает с параметрами --git-dir и --work-tree и требует физического изменения текущего каталога на "полный уровень рабочего дерева".

Кажется, что для упорядочения рабочего процесса подмодулей (то есть одной операции == одна команда) нам нужно написать довольно толстую оболочку вокруг Git. Это печально.

Обратите внимание, что это не возможность отходить от Git или полностью объединить разработку подпроекта в основной проект.

Возможно, я использую git submodules неправильно? Есть ли хороший учебник по рабочему процессу?

Пожалуйста, говорите, даже если вы не знаете правильного ответа, но разделяете мои проблемы.: -)

Ответы

Ответ 1

Вы можете попробовать git поддерево (alt link). Мне было очень повезло с ним, используя как удаленные репозитории, так и чистые (привязанные к master истории) ветки в моем проекте.

Ответ 2

Недавний поток в списке рассылки git содержит патч для того, как получить согласованное состояние репозитория с помощью одной команды. Он в основном называет обновление 20 > при изменении ветвей.

http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330