SVN合并疑问:已标记合并的旧版本为何重复合并并引发冲突?
SVN重复合并已标记版本的原因与解决办法
核心原因
- mergeinfo作用范围不匹配:你的分支根目录记录了
/root/trunk:37185-37889的mergeinfo,但这次合并是针对subfolder子目录执行的。SVN的mergeinfo是路径敏感的——子目录没有自己的mergeinfo时,不会自动继承根目录的记录,它会默认认为这个子目录从未合并过/root/trunk的37185-37190版本,因此会重复触发合并。 - mergeinfo记录关联缺失:即便根目录标记了完整的合并范围,如果之前合并时没有将
subfolder相关的变更正确关联到子目录的mergeinfo(哪怕子目录没有显式mergeinfo),SVN可能会误判这些版本在子目录下未被合并,进而重复处理。
解决办法
- 在分支根目录执行合并:切换到你的分支根目录再运行合并命令,SVN会读取根目录的mergeinfo,自动跳过37185-37889这些已合并的版本,只合并之后的新变更。
- 手动指定合并版本范围:如果必须在子目录操作,直接指定从已合并的最后一个版本开始:
强制跳过已标记的合并范围。svn merge -r 37889:HEAD /root/trunk subfolder - 手动标记子目录的mergeinfo:用
--record-only参数把37185-37190版本标记为已合并到子目录,避免后续重复触发:svn merge --record-only -r 37185:37190 /root/trunk subfolder
内容的提问来源于stack exchange,提问作者wezten
相关产品推荐
相关产品推荐

