Я хочу иметь зонтичный репозиторий (monorepo) с несколькими проектами таким образом, чтобы я мог клонировать каждый проект по отдельности, изменять и нажимать без необходимости клонировать весь монорепозиторий.
monorepo
|
--- project1_repo
|
--- project2_repo
|
--- project3_repo
Например. Я должен иметь возможность клонировать project2_repo
, изменять его, а затем использовать git push без необходимости клонирования всего monorepo
со всеми проектами.
Что было бы лучшим подходом? Является ли субмодуль git единственным способом для этого?
Итак, вы хотите монорепозиторий, но не хотите монорепозиторий? Что вообще означает «monorepo», если вы можете проверить и построить отдельные части отдельно? Лично у меня никогда не было хорошего опыта работы с монорепозиториями на основе git. Я уверен, что некоторые чесотки это, но это всегда было болью для меня.
Я должен иметь возможность клонировать project2_repo, изменять его, а затем git push без необходимости клонировать весь монорепозиторий со всеми проектами.
Если вы не используете подмодули или поддеревья , вы все равно можете работать только с одним репозиторием, выполнив git sparse-checkout , как описано в разделе " Ускорьтесь с частичным клонированием и поверхностным клонированием"
Таким образом, вы можете работать с нужной вам частью монорепозитория, не клонируя все подряд.
Я работаю над решением именно этой проблемы уже несколько лет: https://github.com/josh-project/josh
Это требует некоторой настройки (запуск службы в вашей инфраструктуре), но затем позволяет рассматривать любую часть вашего монорепозитория как репозиторий отдельного проекта.
git sparse-checkout
также может работать потенциально, но не распространяется на случай использования, когда вы хотите совместно работать над некоторыми из ваших индивидуальных проектов вне контекста монорепозитория. То есть, например, у вас есть монорепозиторий, содержащий как частные проекты, так и проекты с открытым исходным кодом, и вы хотите двунаправленно отражать части с открытым исходным кодом на общедоступный сайт, например github.com.
Git не может легко клонировать/извлекать/извлекать подкаталог, он может извлекать только полные коммиты или цепочки коммитов. Подмодули — это не единственный способ обойти ограничение, но и наиболее сложный. IMO, если вы используете подмодули, суперпроект больше не является монорепозиторием.