Git:维护2个分支,99%的代码相似

时间:2017-07-28 07:58:05

标签: java git maven merge branching-and-merging

我正在使用Maven开发Java项目,我需要经常部署到两个不同的weblogic环境。这两个部署之间的唯一区别是这两个文件中的一系列更改:pom.xmlweblogic.xml文件。其余文件都是一样的。

我们正在为此创建2个GIT分支:dev& parallel-dev

但是我们在维护和合并这两个分支之间的变化方面遇到了很多问题。

所有更改都在parallel-dev分支中完成,一旦此代码经过审核和批准,我们就会将其合并到dev分支,但这两个文件除外需要合并(除非修改了pom版本 - 在这种情况下,我们需要合并版本更改,而不是pom.xml中的其他更改)。这有点乱。

我认为这种方法非常混乱,可以改进,但不能真正看到。我很乐意为这个过程保留一个分支,避免我们所面临的所有疯狂合并。

非常感谢任何建议。

- 编辑 -

pom.xml中的差异只是parallel-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中,区别在于上下文根名称和库引用(此lib还具有parallel-dev和dev分支)。

2 个答案:

答案 0 :(得分:0)

我会做以下事情:

  1. 隔离您对dev分支中的这两个文件所做的更改。
  2. 销毁dev分支并从parallel-dev分支重新创建它。
  3. 在新提交中重新应用dev分支上的更改。
  4. 现在,每当parallel-dev分支上发生新的开发时,切换到dev分支并执行:

    git rebase parallel-dev

    (或GUI工具中的等效操作)。 这会将dev分支重置为最新版本的parallel-dev,并将隔离的更改重新应用于这两个xml文件。

    如果对parallel-dev的更改恰好与孤立的更改重叠,您仍然会遇到合并冲突,否则您应该好好去。 (虽然我会仔细检查.xml文件只是为了安全)

答案 1 :(得分:0)

我会在你的项目中创建两个Maven子模块,将代码保存在父模块中,但子模块中的配置不同。这样您就不需要两个不同的分支,因此您可以摆脱所有相关的合并冲突。

父母POM的相关部分:

<modules>
    <module>dev</module>
    <module>paralleldev</module>
</modules>

在子模块中,您只需要创建特定的POM和src/main/resources文件夹,并在POM中包含来自父级的源。与子模块相关的部分:

<build>
    <sourceDirectory>../src/main/java</sourceDirectory>
</build>

您可以使用Maven编译器插件执行更多操作 - 请查看此处:Guide to Using Maven when You Can't Use the Conventions