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 ответа

Я бы сделал следующее:

  1. Изолируйте изменения, которые вы внесли в эти два файла в dev ветка.
  2. Уничтожить dev ветвь и воссоздать его из parallel-dev ветка.
  3. Повторно применить изменения на 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, когда вы не можете использовать соглашения

Другие вопросы по тегам