Структурирование связанных компонентов в git
Моя команда рассматривает возможность перехода от двух десятков репозиториев Subversion к репозиториям Git. Что мы пытаемся исправить, так это то, что в настоящее время у каждого есть свое собственное хранилище Subversion для каждого из компонентов продукта. То, что я хотел бы сделать, это попытаться уменьшить разрастание и помочь построить четкий путь вперед.
Я ищу совет о том, как структурировать репо. Одним из вопросов является то, как группировать связанные проекты. У нас есть два продукта. Каждый продукт имеет набор кода веб-сервисов (php), код клиента Android (java), код клиента iphone (obj c), код ipad (obj c) и код клиента веб-сайта (php + js). В настоящее время каждый владелец имеет свой компонент в отдельном репозитории SVN.
Я думал о том, чтобы попытаться объединить эти компоненты в один репозиторий, но я не могу сказать, является ли это хорошей практикой с git. Это дает реальную выгоду по сравнению с отдельными репо? Казалось бы, это способствует лучшему социальному контракту на качество того, что проверяется из-за общей видимости, но будем ли мы платить за это другими способами?
3 ответа
Критерием объединения разных наборов файлов в одном "компоненте" (здесь Git-репо) является их соответствующий жизненный цикл разработки (то, как они развиваются в плане маркировки и ветвления):
- Вы можете сделать эволюцию на php или java-модуле, не внося никаких изменений в другие модули (например, obj c)?
- Можете ли вы выделить в ветке некоторые изменения / исправления, которые сделаны только для одного из этих модулей, а не для других?
- Вы можете повторно использовать определенную версию одного из этих модулей в нескольких проектах?
Если да, лучше использовать компонентный подход (т. Е. Одно git-репо на модуль), в отличие от одного репо со всем в нем ( системный подход).
См., Например, " Компонентный макет каталога веб-проекта с git и символическими ссылками"
Компонент представляет собой "согласованный набор файлов" и лучше всего управляется в своем собственном репозитории Git.
У вас есть как минимум два варианта:
Если ваши проекты в основном частные, я бы порекомендовал вам придерживаться первого. Читайте документы, это все легко.
Я не знаю много о рабочих процессах Git, но знаю, что у вас есть по крайней мере три варианта:
- Для каждого проекта свое репо, наверное, самый безопасный вариант. Теги и хорошие инструменты тестирования - ваши друзья.
- Отдельные ветви для каждой проектной группы и для каждого проекта свой филиал. Обязательно сделайте резервную копию, прежде чем делать это. Смотрите видео Скотта Чакона на пустых ветках. Я не делал этого раньше, но ветки gh-pages Github - живой пример.
- Подмодули. Каждый проект получает свое собственное git-репо внутри самого git-репо. Наверное, лучшая идея вокруг.