Git: поддерживать 2 ветки с 99% аналогичного кода
Я работаю над проектом Java с Maven, где мне нужно очень часто развертывать в двух разных веб-логических средах. Единственные различия между этими двумя развертываниями - это куча изменений в этих двух файлах: pom.xml
а также weblogic.xml
файлы. Остальные файлы одинаковые.
Для этого мы создаем 2 ветки GIT: dev
& parallel-dev
,
Но у нас много проблем с сохранением и объединением изменений между этими двумя ветвями.
Все изменения сделаны в parallel-dev
ветвь, и как только этот код проверен и утвержден, мы объединяем его dev
ветвь, за исключением тех двух файлов, которые не нужно объединять (если только не изменена версия pom - в этом случае нам нужно объединить только изменение версии, но не остальные изменения в pom.xml). Это немного грязно.
Я думаю, что этот метод довольно запутанный и может быть улучшен, но я не могу понять, как это сделать. Я бы хотел оставить одну ветку для этого процесса и избежать всех тех безумных слияний, с которыми мы сталкиваемся.
Любые советы будут высоко ценится.
-- РЕДАКТИРОВАТЬ --
Разница в pom.xml - это просто другой профиль для параллельной ветки dev:
<profiles>
<profile>
<id>parallel-dev</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<includes>
<include>env.properties</include>
<include>more.properties</include>
...
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>env.properties</exclude>
<exclude>more.properties</exclude>
...
</excludes>
</testResource>
</testResources>
</build>
</profile>
В weblogic.xml
Разница заключается в названии контекста-корня и ссылке на библиотеку (эта библиотека также имеет параллельные ветки dev и dev).
2 ответа
Я бы сделал следующее:
- Изолируйте изменения, которые вы внесли в эти два файла в
dev
ветка. - Уничтожить
dev
ветвь и воссоздать его изparallel-dev
ветка. - Повторно применить изменения на
dev
ветка в новом коммите.
Теперь, когда новая разработка происходит на parallel-dev
филиал, переключитесь на dev
филиал и делать:
git rebase parallel-dev
(или эквивалентная операция в вашем инструменте GUI). Это сбросит dev
переход на новейшую версию parallel-dev
и повторно примените изолированное изменение к этим двум XML-файлам.
Если изменение на parallel-dev
В случае совпадения с изолированными изменениями у вас все равно будут конфликты слияния, но в противном случае вам стоит идти дальше. (Хотя я бы дважды проверил файлы.xml, чтобы быть в безопасности)
Я бы создал два подмодуля Maven в вашем проекте, сохранив код в родительском модуле, но различные конфигурации в подмодулях. Таким образом, вам не нужны две разные ветви, и вы избавляетесь от всех этих связанных конфликтов слияния.
Соответствующая часть родительского POM:
<modules>
<module>dev</module>
<module>paralleldev</module>
</modules>
И в подмодулях вам просто нужно создать конкретный POM и src/main/resources
Папка и в POM включают источники от родителя. Подмодульная часть:
<build>
<sourceDirectory>../src/main/java</sourceDirectory>
</build>
Вы можете сделать еще больше с плагином Maven Compiler - посмотрите здесь: Руководство по использованию Maven, когда вы не можете использовать соглашения