Вопрос

В моем проекте мне нужно использовать сторонний код, хранящийся в нескольких репозиториях 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top