Как версионировать ПО, которое состоит из нескольких модулей с использованием Git?

У меня есть абстрактное приложение, которое состоит из нескольких независимых модулей на разных языках. Я хочу использовать Git Submodules для версионирования: тогда у меня будет основной репозиторий, где хранится документация и конфиги docker-compose, и папки, куда Git тащит мои приложения из всех репозиториев.

Проблема: во время разработки, что бы протестировать новую фичу, мне придется проходить следующем путем: сделать коммит в репозиторий приложения, сделать push, потом обновить submodules в главном репозитории и только тогда поднимать. А если что то сломается, мне надо будет откатывать коммит (что особенно актуально когда разработка только начинается, и таких правок сотни).

Второй вариант - создать подпапки в репозитории, но это приведет к тому что коммиты будут смешиваться. Более того, это может ломать IDE и системы управления зависимостями (например, модули Golangа будут плохо себя чувствовать, а системы контроля версий интегрированные в IDE могут чувствовать себя плохо).

Есть ли какая то альтернатива или гибридный подход к управлению зависимостями приложений из нескольких модулей?


Ответы (1 шт):

Автор решения: Saidolim

Есть 3 вариант,

  1. Создайте для каждого автономного модуля отдельный репозиторий. Что бы программисты могла работать только в 1м проекте.
  2. Создайте ветки Developer и production для каждого проекта. Когда есть логическая концовка заливаете из Developer на Production.
  3. Создайте пользователя для devops в роли Reporter. Что бы с эго имени можно было клонировать проект
  4. Создаете bash файл, который из каждого проекта берет ветку production и компилирует. Думаю компилятор у вас через терминал запускается.
  5. Потом дальше удаляет старые версии и ставил новую и перезапускает службы.

пример

export gitUrl="$gitBaseUrl/project.git"
export gitBranch="production"

gitclone() {
    echo "Cloning project $projectName..."
    rm -rf $projectFolder
    mkdir -p $projectFolder
    git clone --branch $gitBranch $gitUrl $projectFolder
}
→ Ссылка