Ветка SVN синхронизирована с магистралью
Я использую SVN, и мой репозиторий содержит транк:
trunk
|
|_____A
|
|_____B
|
|_____C
У меня также есть 2 ветви с той же структурой, что и ствол:
branch
|
|_____DEV
|
|_____A
|
|_____B
|
|_____C
|
|_____PROD
|
|_____A
|
|_____B
|
|_____C
Магистраль используется для постоянной разработки, а ветви имеют ту же структуру, что и магистраль, но для разных сред (т. Е. DEV и PROD). У меня есть определенная папка (папка 'A'), общая для обеих ветвей ствола и ветви DEV, которую я хотел бы синхронизировать, т. Е. Любые изменения, внесенные в папку 'A' в стволе, автоматически отражаются в ветке DEV в папке ' А".
Какой путь пойти? Я пытался создать сценарий пост-фиксации, чтобы каждое изменение, выполненное в стволе, автоматически фиксировалось в ветви, но до сих пор я не добился успеха.
2 ответа
Какова полная разница между средами PROD и DEV? Это несколько файлов, один другой каталог? Это целая куча файлов?
Обычно что-то подобное обрабатывается как часть процесса сборки. Затем, в процессе сборки, вы можете создать разрабатываемый или производственный выпуск.
Некоторые проекты, которые состоят только из файлов PHP или JavaScript, на самом деле создавать не нужно. В этом случае просто заархивируйте файлы как артефакт, который вы можете развернуть. Просто убедитесь, что файлы включены для правильной среды. Преимущество состоит в том, что после того, как вы настроите сборку, вы можете выполнять такие тесты, как юнит и дым.
В Jenkins вы можете создать два артефакта, один для DEV и один для PROD. Если конкретная сборка для DEV хороша, вы уверены, что артефакт PROD для этой сборки также хорош.
Вы также можете создать один развертываемый артефакт, и процесс развертывания может изменить этот артефакт развертывания для нужной среды. Или используйте что-то вроде Zookeeper, чтобы сохранить переменные и параметры среды в экземпляре Zookeeper, и просто используйте один артефакт, который можно развернуть в любой среде.
Нет причин использовать две отдельные ветви, которые должны синхронизироваться друг с другом.
Но зачем вам создавать ветку в этом случае? Есть несколько проблем, к которым этот подход.
Параллельная разработка невозможна, так как в случае, если команда, работающая над транком, что-то решает, чтобы решить какую-то проблему, это может нарушить параллельную разработку, происходящую в branch1 или branch2. Рассмотрим усилие стабилизации branch1 или branch2 для того, что имеет значение.
Вы увидите много случаев конфликтов, происходящих в стволе и ветвях.
Основываясь на моем опыте работы над несколькими проектами разработки, вот моя рекомендация. Надеюсь это поможет.
Сохраните репозиторий в качестве родителя и решайте план слияния ежемесячно (скажем так). Это, безусловно, потребует усилий по слиянию, но усилия по стабилизации уменьшатся.
Еще одна вещь, которую можно сделать, это иметь зависимость maven в ветвях, которые будут использовать последнюю версию, выпущенную родительским репозиторием. Таким образом, можно избежать копирования всего хранилища при создании ветки.