Рабочий процесс подмодулей Git
-
22-09-2019 - |
Вопрос
В моем проекте мне нужно использовать сторонний код, хранящийся в нескольких репозиториях Git.Мой проект также хранится в (отдельном) репозитории Git.Над основным проектом со мной работают несколько человек, и я занимаюсь сопровождением.
В более ранних проектах я вручную копировал зависимости в рабочее дерево Git, добавляя небольшой файл, определяющий версию, которую я использую.
Это довольно неудобно, поскольку мне нужно ежедневно обновлять одну из зависимостей и часто самому вносить в нее код, большую часть времени связанный с изменениями в основном проекте.
Я решил попробовать подмодули Git для управления.Чем больше я их пробую, тем больше разочаровываюсь.Даже кажется, что ручное копирование, пожалуй, лучше.
Вот некоторые из моих опасений:
- Мы больше не можем получить согласованное состояние репозитория с помощью одной команды (
git checkout
теперь нужноgit submodule update --init
). - Мы не можем правильно использовать некоторые инструменты Git (
git archive
является наиболее заметным). - Мы не можем видеть изменения статуса/отличия подмодулей основного проекта.
- Как я только что обнаружил на собственном горьком опыте,
git submodule
не работает с--git-dir
и--work-tree
параметры и требуют физического изменения текущего каталога на «верхний уровень рабочего дерева».
Похоже, что для оптимизации рабочего процесса наших подмодулей (то есть одна операция == одна команда) нам нужно написать довольно толстую оболочку вокруг Git.Это грустно.
Обратите внимание, что невозможно отказаться от Git или полностью объединить разработку подпроекта с основным проектом.
Возможно, я использую git submodules
неправильным образом?Есть ли хороший учебник по рабочему процессу?
Пожалуйста, выскажитесь, даже если вы не знаете правильного ответа, но разделите мои опасения.:-)
Решение
Возможно, вы захотите попробовать Поддерево git (альтернативная ссылка) вместо.Мне с этим очень повезло, я использовал как удаленные репозитории, так и чистые (отвязанные от master
история) ветки в моем проекте.
Другие советы
Недавняя ветка в списке рассылки git включает патч, позволяющий получить согласованное состояние репозитория с помощью одной команды.По сути, он вызывает обновление подмодуля git при смене ветвей.
http://thread.gmane.org/gmane.comp.version-control.git/130155/focus=130330