В моем проекте мне нужно использовать сторонний код, хранящийся в нескольких хранилищах Git. Мой проект также хранится в (отдельном) хранилище Git. В основном проекте работает несколько человек, и я - сопровождающий.Рабочий процесс Git subodules
В предыдущих проектах я использовал для копирования зависимостей вручную для рабочего дерева Git, добавляя небольшую версию, определяющую версию, которую я использую.
Теперь это довольно неудобно, так как мне нужно ежедневно обновлять одну из зависимостей и часто вносить в нее код сам, в большинстве случаев, вместе с изменениями в основной проект.
Я решил попробовать подмодули Git для управления. Чем больше я их пытаюсь, тем больше разочаровываю. Кажется, что ручная копия, возможно, лучше.
Вот некоторые из моих проблем:
- Мы уже больше не в состоянии получить согласованное состояние хранилища с помощью одной команды (
git checkout
теперь нуждаетсяgit submodule update --init
). - Мы не можем использовать некоторые из инструментов Git правильно (
git archive
- это самый известный). - Мы не можем видеть изменения/отличия статуса в подмодулях из основного проекта.
- Как я только что нашел,
git submodule
не работает с параметрами--git-dir
и--work-tree
и требует физического изменения текущего каталога до «верхнего уровня рабочего дерева».
Похоже, что для оптимизации рабочего процесса подмодулей (то есть одной операции == одна команда) нам нужно написать довольно толстую оболочку вокруг Git. Это грустно.
Обратите внимание, что это не вариант перехода от Git или объединения проекта подпроекта полностью в основной проект.
Возможно, я пользуюсь git submodules
неправильным способом? Есть ли хороший учебник по документообороту?
Пожалуйста, говорите, даже если вы не знаете правильный ответ, но разделяете мои проблемы. :-)
Один из моих других любимых подмодулях подводных камней, если вы удалите подмодуль, и заменить его новым подмодуль в том же месте, он разбивает хранилище для всех остальных. (например, кто-то разворачивает библиотеку в github, и вы переключаете подмодуль на то, чтобы указывать на fork.) Обход - это удаление подмодуля, его все тянуть и обновлять, а затем заменять подмодуль и каждый раз тянуть и обновлять снова. –
Я думал, что кто-то украл это сообщение и опубликовал его на habr без справки, но потом я посмотрел на имя ... :-D Тем не менее, ссылка на SO была бы приятной, я думаю. –
Есть один.Посмотрите ближе на ссылки в тексте. –