【问题标题】:Git: maintain 2 branches with 99% of similar codeGit:用 99% 的相似代码维护 2 个分支
【发布时间】:2018-01-04 04:44:20
【问题描述】:

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

我们为此创建了 2 个 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 中,区别在于上下文根名称和库引用(这个库也有并行开发和开发分支)。

【问题讨论】:

  • 可能在 .gitignore 中声明文件,这样它们就不会被提交
  • @Lino pom.xml?不!这 100% 需要承诺。
  • 你能把 pom.xml 和 weblogic.xml 分开吗?剩下的代码只有一个分支吗?
  • pom文件有哪些变化?依赖项?比制作​​两个具有不同依赖关系的不同模块...
  • 这到底意味着你在不同环境下只有属性文件不同...github.com/khmarbaise/multienv-maven-plugin

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


【解决方案1】:

我会做以下事情:

  1. 隔离您在dev 分支中对这两个文件所做的更改。
  2. 销毁dev 分支并从parallel-dev 分支重新创建它。
  3. 在新的提交中重新应用 dev 分支上的更改。

现在,每当 parallel-dev 分支发生新的开发时,切换到 dev 分支并执行以下操作:

git rebase parallel-dev

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

如果对parallel-dev 的更改碰巧与孤立的更改重叠,您仍然会有合并冲突,但否则您应该很高兴。 (虽然为了安全起见,我会仔细检查 .xml 文件)

【讨论】:

    【解决方案2】:

    我将在您的项目中创建两个 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

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2019-04-20
      • 2020-05-19
      • 2011-01-11
      相关资源
      最近更新 更多