Git:如何维护两个代码分支,它们有 99% 相似的代码?

6
我正在使用Maven开发一个Java项目,需要频繁部署到两个不同的Weblogic环境。这两个部署之间唯一的区别在于这两个文件中的一堆更改:pom.xmlweblogic.xml文件,其余文件都相同。
我们为此创建了两个GIT分支:devparallel-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文件中,区别在于上下文根名称和库引用(该库还有parallel-dev和dev分支)。

5
@Lino,不是pom.xml!这个必须要提交到版本控制系统中。 - Seelenvirtuose
你能否将pom.xml和weblogic.xml分开,并只为其余代码保留一个分支? - achAmháin
可能更容易的方法是复制这两个文件并以稍微不同的名称保存,只有在需要使用时才更改所需文件的名称。虽然这可能是一种麻烦的方法 :-) - stonecompass
1
POM文件需要做哪些更改?依赖关系?然后创建两个具有不同依赖关系的不同模块... - khmarbaise
1
这最终意味着您只有不同环境的属性文件差异... http://github.com/khmarbaise/multienv-maven-plugin - khmarbaise
显示剩余6条评论
2个回答

0
我会按照以下步骤进行:
  1. 将你在dev分支中对这两个文件所做的更改隔离出来。
  2. 销毁dev分支,并从parallel-dev分支重新创建它。
  3. dev分支上新建一个提交,重新应用更改。

现在,每当在parallel-dev分支上进行新的开发时,请切换到dev分支并执行:

git rebase parallel-dev

(或者在你的GUI工具中执行相应操作)。 这将重置dev分支为最新版本的parallel-dev,并重新应用这两个xml文件的隔离更改。

如果对parallel-dev的更改恰好与隔离更改重叠,则仍然会出现合并冲突,但除此之外,你应该可以顺利进行。(虽然我建议你再次检查.xml文件以确保安全)


0
我会在您的项目中创建两个Maven子模块,将代码保留在父模块中,但将不同的配置放在子模块中。这样,您就不需要两个不同的分支,从而摆脱所有相关的合并冲突。
父POM的相关部分:
<modules>
    <module>dev</module>
    <module>paralleldev</module>
</modules>

在子模块中,您只需要创建特定的 POM 和 src/main/resources 文件夹,并在 POM 中包含来自父级的源代码。子模块相关部分如下:
<build>
    <sourceDirectory>../src/main/java</sourceDirectory>
</build>

使用Maven编译器插件,您可以做更多的事情——请看这里:无法使用约定时使用Maven的指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接