У меня около 20 различных репозиториев. Многие из них независимы и компилируются как библиотеки, но некоторые другие имеют между собой зависимости. Разрешение зависимостей и ветвление сложны.
Предположим, у меня есть суперпроект, который объединяет только все остальные репозитории. Он используется исключительно для запуска тестов — никакой реальной разработки здесь не происходит.
/superproject [master, HEAD]
/a [master, HEAD]
/b [master, HEAD]
/c [master, HEAD]
/...
Теперь, чтобы разработать определенные функции или исправления для каждого из них (a
), особенно для тех, которые требуют определенных версий проектов для компиляции или запуска (b v2.0
и c 3.0
), я должен создать новую ветку:
/superproject [branch-a, HEAD] <-- branch for 'a' project
/a [master] <-- new commits here
/b [v2.0]
/c [v3.0]
Для b
может потребоваться что-то еще, например a v0.9
и c v3.1
:
/superproject [branch-b, HEAD] <-- branch for 'b' project
/a [v0.9] <-- older version than 'a'
/b [master] <-- new commits go here
/c [v3.1] <-- newer version than 'a'
Это становится еще более сложным и сложным при реализации общих рабочих процессов git, включающих ветки функций, ветки исправлений, ветки выпуска и т. д. Мне советовали (и не советовали) использовать git-submodules
, git-subtree
, git-repo
, git-slave
Google и т. д.
Как я могу управлять непрерывной интеграцией для такого сложного проекта?
ИЗМЕНИТЬ
Реальный вопрос заключается в том, как запускать тесты без необходимости имитировать все другие зависимые проекты? Особенно, когда все проекты могут использовать разные версии. Запуск тестов Jenkins после фиксации в подмодулях git