如何在“两个修订版本之间”提交更改?
我使用的是引号,因为显然您不能在两个修订版之间真正提交任何内容-它们已经在存储库中。
开始时这个问题听起来很尴尬,但这是我在工作中遇到的现实生活场景。
我们正在对开发分支(或“功能分支”,fb,也称为它们)进行开发时更改,当工作完成后,我们将合并到主干。
基本的工作流程。
我们从主干发布SW,并且同意在实际发布前几天冻结代码。
现在,我很愚蠢地相信从主干构建的候选发布版本(RC)很好,因为在我们实际发布软件之前,所有自动化测试均已通过并提交了对主干的合并。并删除了功能分支。
假设发布候选版本为42,而我们发布的SW版本为v1.0.3。因此,r42是v1.0.3版的RC。
因此,RC看起来不错,但是在发布SW之前,我将r43提交到了主干。 CI中的所有测试都通过了,所以我去了并删除了分支fb14(修订版44)。
原来RC毕竟不好,需要修复,但是v1.0.3 一定不要包含功能14(在fb14中实现),即r43。
以一种图解形式表示相同:
==r42=======r43
^ /
| /
| fb14
|
commit fix there to get new RC
所以我需要带回r42,提交一些东西,然后带回r43。
好吧,这很容易,对吧?回滚到r42:
svn merge -r HEAD:42 .
svn commit -m "Reverted back to RC of v1.0.3"
实施所需的修复程序并
svn commit -m "Fixed b0rken feature for v1.0.3"
然后我们将发布SW,并携带r43:
svn up
svn merge -c 43 .
但是等等,这什么也没做!我去了并删除了分支fb14,所以我需要从svn中挖掘出来并将其再次合并到主干吗?当然,我一定能够以某种方式带回r43。
所以我有点想要这个:
roll back to r42
-------------
/ \
==r42=====r43=====r45=====r46=====r47
/ \ ^ /
merge/ \ | /
/ \ fix /
fb14 \ /
| -------------
| bring back changes from r43
|
deleted in r44
编辑: 嘘,他正在回答自己的问题!
阅读https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/
如果/当我再次遇到类似情况时,我想稍后再查找。
答案 0 :(得分:0)
svn merge -c 43 --ignore-ancestry .
svn commit -m "Introducing feature 14"
为什么
svn merge -c 43 .
在后备箱中不能使用吗?
因为祖先。
假设r43中的更改已保存到文件foo.cpp
svn merge
记录血统,这是基本知识。有了祖先,我们知道了如何追溯到较早的修订版。对吧?
因此,在提交修订版43时,foo.cpp@42成为foo.cpp@43的祖先。然后我又回到r42并提交r44,并且foo.cpp@43成为foo.cpp@44的祖先。
因此,现在是修订版45,我想合并修订版43。但是我将foo.cpp@44从foo.cpp@42合并,因此将foo.cpp@43基本合并到foo.cpp@45祖先搞砸了。
要使foo.cpp@43成为foo.cpp@45,我需要忽略祖先。
svn merge -c 43 --ignore-ancestry .
进一步阅读http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.ancestry
当然可以通过从地下墓穴中挖出分支fb14并再次合并到主干来实现相同的目的
roll back to r42
----------------
/ \
--r42-----r43-----r45-----r46-----r47
/ ^ /
/ | /
/ fix /
merge fb14--- /
\ merge fb14
delete fb14
即 (在第43版中)
svn merge -r HEAD:42 .
svn commit -m "Reverted back to RC1 of v1.0.3"
像您从未编码过的代码一样,我们需要立即修复!
svn commit -m "Fixed b0rken feature for v1.0.3"
踢CI机生成软件包并发布软件。
svn cp ^/branches/fb14@43 ^/branches/fb14-2
svn up
svn merge --reintegrate ^/branches/fb14-2
svn commit -m "Introducing feature 14"
svn rm ^/branches/fb14-2
但是我不喜欢这种方法,所以我阅读了有关高级合并的信息。 ;)