【发布时间】:2015-08-05 02:21:06
【问题描述】:
我的团队正计划从 Perforce 切换到 Git,我正试图找到一种方法让 Git 忽略分支之间的 pom 版本差异。这在 Perforce 中运行良好,我没有运气用 Git 重现该行为。
这是我的步骤:
-
结帐父分支
ndeckard@ws /c/dev/proj/testgit (master) $ git checkout release/1.0 Switched to branch 'release/1.0' Your branch is up-to-date with 'origin/release/1.0'. -
从中创建子分支
ndeckard@ws /c/dev/proj/testgit (release/1.0) $ git branch branch/FEA-650 -
切换到新分支
ndeckard@ws /c/dev/proj/testgit (release/1.0) $ git checkout branch/FEA-650 Switched to branch 'branch/FEA-650' -
更新子分支pom版本
<version>1.0.0-FEA-650-SNAPSHOT</version> -
添加并提交
ndeckard@ws /c/dev/proj/testgit (branch/FEA-650) $ git status On branch branch/FEA-650 Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: pom.xml no changes added to commit (use "git add" and/or "git commit -a") ndeckard@ws /c/dev/proj/testgit (branch/FEA-650) $ git add pom.xml ndeckard@ws /c/dev/proj/testgit (branch/FEA-650) $ git commit -m "set feature branch pom version" [branch/FEA-650 59e156e] set feature branch pom version 1 file changed, 1 insertion(+), 1 deletion(-) -
切换回父分支
ndeckard@ws /c/dev/proj/testgit (branch/FEA-650) $ git checkout release/1.0 Switched to branch 'release/1.0' Your branch is up-to-date with 'origin/release/1.0'. -
将子分支合并到父自动接受的父分支版本中(使用“我们的”合并策略)
ndeckard@ws /c/dev/proj/testgit (release/1.0) $ git merge branch/FEA-650 -s ours Merge made by the 'ours' strategy. -
尝试第二次将孩子合并到父母中(已经是最新的。)很好。这就是我想要的
ndeckard@ws /c/dev/proj/testgit (release/1.0) $ git merge branch/FEA-650 Already up-to-date. -
签出子节点并将父节点合并到子节点(它快进并将父分支 pom 版本粘贴在子节点上)。不好。我需要它像上面一样说“已经是最新的”,并保持子分支 pom 版本已经在子分支上
ndeckard@ws /c/dev/proj/testgit (release/1.0) $ git checkout branch/FEA-650 Switched to branch 'branch/FEA-650' ndeckard@ws /c/dev/proj/testgit (branch/FEA-650) $ git merge release/1.0 Updating 59e156e..2f3a2a0 Fast-forward pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
在第 7 步之后,我想在父母和孩子之间的任一方向合并说(已经是最新的。)
Git 有没有办法让未来的合并忽略分支之间 pom 文件中的版本号差异?
【问题讨论】:
-
你不能创建一个别名来检查差异,并且只有在有差异时才合并?如果没有发现差异,您可以输出任何您需要的内容。
-
我从来没有处理过这个问题,但我看到了三种解决问题的方法:(1)完全忽略 POM 文件,并从元数据(分支等)自动生成它们; (2)使用涂抹/清洁过滤器插入和去除分支细节(这是1和3之间的中间方法); (3) 为此类文件编写自定义合并驱动程序。在实践中没有真正做到这一点,我不能说哪些方法真正有效或问题会是什么。
-
关于 (1) - 完全忽略 pom 文件对我来说不是一个选项。我仍然关心合并这些文件中的其他行。关于 (2) - 我之前在文档中遇到了对涂抹和过滤器的引用,但没有深入研究。我不完全了解它们是什么,并将开始阅读它们以查看是否可行。关于 (3) - 我想避免编写特殊的合并驱动程序。将行差异标记为合并的功能是我通过 perforce 免费获得的,我想在 git 中找到类似的东西。
-
您会考虑将部分版本计算从 POM 外部化的非 Git 特定解决方案吗?如果是这样,请添加到您的问题中。
-
Javabrett,您下面的解决方案看起来像是解决问题的一个不错的替代方法。放假后我试试。我仍然希望将我的版本保留在 POM 中,并让 VCS 跟踪这些行已经解决。 Perforce 按照上述步骤很好地做到了这一点,我认为执行此类操作的能力将是任何现代 VCS 的基本功能。
标签: git maven merge perforce pom.xml