Search
Write a publication
Pull to refresh

Для тех, кто хочет распилить монорепу на подмодули или уже сделал это. Задача со звёздочкой.

Дано: в репозитории около 50 подмодулей,  текущие ветки у них имеют разные названия. Джун Вася создал в каждом подмодуле новую ветку и внёс минорные правки. Чтобы провести ревью, миддл Серёжа получил Васины изменения, переключил ветки родительского репозитория и выполнил команду:

git submodule update --init --recursive

После ревью Вася пошёл исправлять замечания, а Серёжа вернулся к разработке своей фичи, вот только подмодули теперь в состоянии head detached.

Вопрос: как быстро подгорит у программистов из-за необходимости выставлять подмодули из состояния head detached в соответствующие feature-ветки, если процесс повторять?

Решение: использовать команду:

git submodule foreach --recursive 'git name-rev --name-only $sha1 | xargs git checkout'

По хешу команда найдёт указатель и на него переключится. Если есть несколько указателей для текущего коммита, будет выбрано имя ветки первое по алфавиту.
Если на текущий коммит подмодуля никакая ветка не указывает, получим head detached. Рекурсивно (если у подмодулей есть подмодули) тоже работает.

Ответ: так и живём.

Tags:
Total votes 5: ↑5 and ↓0+9
Comments6

Articles