Я только что перешел от SVN и Maven к GIT + IVY, у меня возникли серьезные сомнения по поводу исправления ошибок при управлении тегами.
Давайте предположим, что наш клиент, скажем, клиент X, имеет в производстве версию 1.0нашего программного обеспечения, которое поддерживает несколько клиентов.
Сборка (проект, который собирает все зависимости нашего программного обеспечения) приложения клиента X будет выглядеть следующим образом:
Версия 1.0 Клиент X ПроизводствоФайл проекта ivy.xml проекта сборки:
branch="master" revision="1.0"
- dependency mod_1 branch=master version=1.0
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
Заказчик X использует версию 1.0, но в то же время мастер эволюционировал, и давайте предположим, что сейчас это версия 4.0, используемая другими пользователями.
Версия 4.0 Заказчик Y и Z Производственная сборка Project Файл ivy.xml:
branch="master" revision="4.0"
- dependency mod_1 branch=master version=4.0
- dependency mod_2 branch=master version=4.0
- dependency mod_3 branch=master version=4.0
- dependency mod_4 branch=master version=4.0
Теперь клиент X обнаружил, что существует ошибка, связанная с mod_1.
Они вырезали ветку из mod_1отметьте 1.0 главной ветки (master_1.0_fix) и исправьте ошибку, приводящую к версии 1.0.1 master_1.0_fix
Их сборка будет выглядеть следующим образомсейчас:
Версия 1.0.1 Customer X Production Assembly Project Файл ivy.xml:
branch="master_1.0_fix" revision="1.0.1"
- dependency mod_1 branch=master_1.0_fix version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
Теперь они хотели бы, чтобы имя ветви было выровнено с другими, в нескольких словах они быхотелось бы иметь:
branch="master" revision="1.0.1"
- dependency mod_1 branch=master version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
Но я не думаю, что это будет правильно, так как это не будет представлять правильный поток приложения
Это потому, что втем временем основная ветвь эволюционировала с версии 1.0, и фактическое исправление было определено в другой ветке, как вы можете видеть, а не в главной, которая в настоящее время содержит совершенно другой код, что требует дополнительных лет разработки.
В SVN тег не относится ни к одной ветви, поэтому я могу иметь тег 1.0, а затем создать исправление для этой версии без необходимости относиться к какой-либо ветви, что для меня является действительно ясной концепцией.
В IVY существует тесная связь с ветвью, из-за которой появляется тег, который мне не совсем понятен.
Существуют разные способы продолжения, но я хочу получить подтверждение о стандартный / лучший подход.
Например, мы можем согласиться с тем, что единственное лучшее и стандартное решение - сохранить ссылку на разностную ветвь, поэтому
branch="master_1.0_fix" revision="1.0.1"
- dependency mod_1 branch=master_1.0_fix version=1.0.1
- dependency mod_2 branch=master version=1.0
- dependency mod_3 branch=master version=1.0
- dependency mod_4 branch=master version=1.0
Или яможет жестко закодировать ветку в файл ivy.xml во время выпуска и выдвинуть его, ссылаясь на основную ветку, это будет обходной путь, поскольку наша автоматизация фактически не поддерживает это, а также, на мой взгляд, неправильный подход, но я бы хотелПолучите подтверждение от людей, которые имеют более глубокое понимание IVY.
Извините, если вопрос не ясен, но, как вы можете себе представить, это не простая тема для подведения итогов.