我对为什么子目录合并是坏的做了一些研究,最近在我们的存储库中发现了一个包含mergeinfo的子目录。
我正在尝试手动删除这个合并信息,并想看看我是否正确地理解了mergeinfo并正确地执行了它。
ROOTDIR mergeinfo
/分支机构/分会53:18065-18126
/分支/分会54:18150-18204,18210-18231
/branches/Iteration55:18341,18348,18353-18355,18357,18364-18365 <=====这一行是不同的
/分支/gdsRework:17329-17457
/trunk:17869,18085
SUBDIR mergeinfo
/支部/Iteration53/kiwi-web:18065-18126
/branches/Iteration54/kiwi-web:18150-18204,18210-18231
/分支/iteration55/kiwi:18336-18428 <=====这一行是不同的
/分支/gdsRework/kiwi-web:17329-17457
/主干/猕猴桃网站:17869 18085
两者之间只有一条不同的行。我还注意到,中的范围18336-18428包括ROOTDIR合并信息中同一行的所有修订。
因此,我的计划是将ROOTDIR中的这一行替换为SUBDIR中的行,并将SUBDIR合并信息全部删除:
新品种merginfo
/分支机构/分会53:18065-18126
/分支/分会54:18150-18204,18210-18231
/分支/Iteration55:18336-18428 <=====现在与SUBDIR相同
/分支/gdsRework:17329-17457
/trunk:17869,18085
SUBDIR合并信息被删除.
这安全吗?陷阱会在哪里呢?提前谢谢你。
发布于 2012-11-02 22:34:41
不建议手动编辑mergeinfo。尽管在过去,我做了您所描述的事情,即使根和子did之间的差异更复杂,这样的编辑是非常容易出错的,因此需要非常小心和准确。正如我后来了解到的,SVN非常强大,可以很容易地解决这种情况;所以最好不要养成手工合并信息编辑的习惯。
简单的情况是,subdirectory中记录的“额外”修订只影响该子目录。在这种情况下,您只需要在ROOTDIR级别对修订18336到18428进行记录合并。仅记录的合并将更新ROOTDIR的mergeinfo,而不触及任何文件,而且由于SUBDIR合并信息将与ROOTDIR完全相同,因此它将删除这一过度。
--record-only选项添加到用于实际合并的svn merge命令中即可。请注意mergeinfo中的范围(包括它的结束和两者之间的所有内容)和-r选项中的范围之间的区别(它指定了两个要进行diff的修订);例如,在命令行中,您需要指定-r 18335:18428,即接受diff的起始修订比要合并的第一个修改少一个。
更复杂的情况是,如果这些修订合并到SUBDIR,而不是ROOTDIR,也会更改SUBDIR之外的文件。很可能这些变化还没有被合并。如果忽略这些更改是安全的,那么您也可以进行只记录的合并。相反,如果这些更改碰巧被遗漏,您可能希望对ROOTDIR级别上的修订进行常规合并,并修复合并冲突(如果有的话)。
完成合并(只记录或常规合并)后,检查mergeinfo是否为目录正确更改,并提交结果。
我在这里学到了一篇很好的文章,介绍了mergeinfo以及如何被SVN命令操作(包括只记录的合并、合并信息省略等),这里是:Subversion 1.5 Mergeinfo -了解内部结构。我建议您在尝试修复存储库中的mergeinfo之前先阅读它。
https://stackoverflow.com/questions/13201153
复制相似问题