- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的团队正计划从 Perforce 切换到 Git,我正试图找到一种方法让 Git 忽略分支之间的 pom 版本差异。这在 Perforce 中运行良好,我没有运气用 Git 重现该行为。
这是我的步骤:
check out 父分支
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'.
将子分支 merge 到父自动接受的父分支版本中(使用“我们的” merge 策略)
ndeckard@ws /c/dev/proj/testgit (release/1.0)
$ git merge branch/FEA-650 -s ours
Merge made by the 'ours' strategy.
尝试将子项第二次 merge 到父项中(已经是最新的。)很好。这就是我想要的
ndeckard@ws /c/dev/proj/testgit (release/1.0)
$ git merge branch/FEA-650
Already up-to-date.
checkout 子节点并将父节点 merge 到子节点中(它快进并将父分支 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 步之后,我想在父子之间的任一方向 merge 说(已经是最新的。)
Git 有没有办法让以后的 merge 忽略分支之间 pom 文件中的版本号差异?
最佳答案
我最初的想法是通过部分外部化 POM 来自动化您的 POM 版本号 <version>
计算,请参阅答案中的进一步内容。如果您不想这样做,那么您需要重新评估您的 Git 工作流程。
双向 merge ,进入master
然后回到功能分支会导致问题。你的git merge branch/FEA-650 -s ours
使用 ours 策略告诉 Git 您已经将功能分支中的所有 提交和更改集成到 master
中,包括你的 pom.xml
版本更改,丢失,带有 master
保留其版本。 master 分支现在认为 feature 分支的 HEAD 是一个共同的祖先(它是 merge 时的父提交),所以当你将它 merge 回 feature 分支时,Git 说“当你 merge 到 master 时一切都已解决,没有变化……快进”。
简单的答案是你应该在 merge 到 master 后重新分支到一个新的特性分支,给你的特性分支一个新的/后来最年轻的共同祖先,然后你需要以某种方式重放你的 POM <version>
改变。你不应该继续在原来的功能分支上工作,因为它已经被 merge 了。要从 master 那里获取新的变化,你应该重新分支。似乎有一些暗示,您可能在未与 master merge 的功能分支上留下了更改,否则您将不再需要它并且可以重新分支,或者它可能只是 <version>
更改您感兴趣的提交。
有许多方法可以简化/加速/自动化重新分支的版本号管理,从外部化(见下文)到 cherry-picking
它来自占位符分支,使用 Maven 插件,例如Versions Maven Plugin .
原始答案
另一种方法是从外部计算最终/有效 <version>
在 POM 文件之外,基于分支元数据或来自 CI 的其他输入。在 Maven 中,如果不进行预修改,这有点棘手 pom.xml
checkout 后自己,但看看 Maven External Version Plugin .
它 Hook 到 Maven 生命周期并将构建一个 pom.xml.new-version
动态文件(你可以 .gitignore
),根据你提供的任何内容动态替换全部或部分版本号 - 功能分支名称,git commit hash 等。
构建/部署插件并将其添加到您的 POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-external-version-plugin</artifactId>
<version>0.1.0-SNAPSHOT</version>
<extensions>true</extensions>
<configuration>
<strategy hint="sysprop"/>
</configuration>
</plugin>
...然后通过替换版本字符串发挥创意,例如您可以:
mvn install -Dexternal.version-qualifier=$(git symbolic-ref --short HEAD| sed s_^master\$__)
... 这将改变 1.2.3-SNAPSHOT
至 1.2.3-FEA-650-SNAPSHOT
如果当前 checkout 的 Git 分支是 FEA-650
.您可能需要考虑更换 /
与 -
在你的分支命名策略中,取决于 Maven 的想法(我发现 /
令人困惑,但那只是我),或修改 sed
相应地。
在最坏的情况下,这将允许您从 POM 中删除版本号,因此可以安全地 merge 其他 POM 更改,并且已知这些更改与版本号无关——如有必要,您可以将版本号保存在另一个文件中,使用 Maven Properties Plugin 加载它们并在需要时替换整个版本号。
关于git - Git有没有办法让 future 的 merge 忽略分支之间pom文件中的版本号差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407227/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
在现代 IDE 中,有一个键盘快捷键可以通过键入文件名称来打开文件,而无需将手放在鼠标上。例如: Eclipse:Cmd|Ctrl + Shift + R -> 打开资源 IntelliJ:Cmd|C
有什么东西会等待事件发生(我正在等待的是 WebBrowser.DocumentCompleted),然后执行代码吗?像这样: If (WebBrowser.DocumentCompleted) 不会
我使用 PHP Minify,它很棒。但我的问题是,是否有任何 PHP 插件或其他东西可以自动检测 javascript/css 代码并自动缩小它?谢谢。 最佳答案 Javascript 压缩器? 看
有没有一种语言,类似什么CoffeeScript是JavaScript,编译成windows batch|cmd|command line的语言? 我指的cmd版本是基于NT的,尤其是XP sp3及以
我知道我可以 ,但是,我真的宁愿有一个任务,我可以从任何可以使用所有(或至少大部分)属性的操作系统调用 copy ,但这并没有消除 unix 上的权限。 我想知道是否已经有解决方案,或者我必须自己编
我正在使用 Vuejs(不使用 jQuery)开发一个项目,该项目需要像 jvectormap 这样的 map 但正如我所说,我没有使用 jQuery,那么是否有任何其他库可以在不使用 jQuery
想要进行一个简单的民意调查,甚至不需要基于 cookie,我不在乎投了多少票。有没有类似的插件或者简单的东西? 最佳答案 这是一个有用的教程 - 让我知道它是否适合您 using jQuery to
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
var FileBuff: TBytes; Pattern: TBytes; begin FileBuff := filetobytes(filename); Result := Co
我想要一个 vqmod xml 文件来添加一次上传多个图像的功能。身边有这样的事吗? 编辑:Opencart版本:2.1.0.1 最佳答案 最后我写了一个xml来添加到opencart 2.1.0.1
所以考虑这样的函数: public void setTemperature(double newTemperatureValue, TemperatureUnit unit) 其中Temperatur
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我是 ggplot2 的新手,一直在尝试找到一个全面的美学列表。我想我理解它们的目的,但很难知道哪些可以在各种情况下使用(主要是几何图形?)。 Hadley 的网站偶尔会在各个几何图形的页面上列出可用
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否有任何 PHP 函数可以将整数转换为十万和千万? 900800 -> 9,00,800 500800 -> 5,00,800 最佳答案 由于您已在问题标签中添加了 Yii,因此您可以按照 Yii
使用 Clojure 一段时间后,我积累了一些关于它的惰性的知识。我知道诸如map之类的常用API是否是惰性的。然而,当我开始使用一个不熟悉的API(例如with-open)时,我仍然感到怀疑。 是否
我的项目需要一个像 AvalonDock 这样的对接系统,但它的最后一次更新似乎是在 2013 年 6 月。是否有更多...积极开发的东西可以代替它? 最佳答案 AvalonDock 实际上相当成熟并
我正在寻找一个可以逆转 clojure 打嗝的函数 所以 turns into [:html] 等等 根据@kotarak的回答,这现在对我有用: (use 'net.cgrand.enliv
我是一名优秀的程序员,十分优秀!