如何将SVN中的分支合并回主干,并保留所有提交历史记录?我知道在Git中可以使用
merge -squash
SVN中是否有相应的命令?我正在使用SVN 1.6版本。
从Subversion 1.5版本开始,合并记录被保存在本地工作副本的svn:mergeinfo属性中,因此这些信息不会丢失。
如果你使用svn log -g
而不是正常的svn log
,你可以查看合并后的修订版本。
正常合并操作如下:
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
但是如果你使用分支,有时候使用重新集成合并更加方便。在这种情况下,你应该首先使用类似以下的方法将所有主干变更合并到分支:
svn merge svn://server/trunk my_branch_wc
(这会合并所有尚未合并的内容)
在将此更改提交到分支后,您可以使用以下命令:
svn merge --reintegrate svn://server/branch my_trunk_wc
将所有更改整合成一个提交。 (此操作后,您应该删除分支)
svn log -g
命令时,旧版本的历史记录仍然存在。但是你不应该再使用这个分支了,因为没有更多的簿记记录就无法再次合并了。(需要注意的是,较新版本的 Subversion(1.8+)已经取消了 --reintegrate 要求,并且可以通过正确地从主干进行合并来重新使用该分支) - Bert Huijben#/bin/bash
BRANCH="http://your branch url"
for i in {1127..1138} # list of revisions
do
REV=$i
echo $REV $BRANCH
echo merged $REV from $BRANCH > tmps.commit
svn log -c $REV $BRANCH >> tmps.commit
svn up
svn merge -c $REV $BRANCH ./
svn commit -F tmps.commit
rm tmps.commit
done
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
参见:
svn merge --help
svn:mergeinfo
的作用吗? - detly您可以将每个变更集保存为差异,并在主干之上提交每个变更集。这通常被称为“移植”,并且有各种自动执行此操作的工具。
看起来你想要:
我认为这受到底层 SVN 架构的支持。但我不知道是否有任何客户端提供它(尽管 svnmucc 将为多个 cp
、mv
、rm
命令执行此操作)。除非你想做比我更多的研究(这不需要太多时间),或编写自己的客户端来驱动 SVN 库来执行它(这可能很难但仍然可行);那么我认为你将不得不牺牲上述 2 和 3 中的一个。
(如果你放弃了第三个,你可以立即转储存储库,并修改转储文件以仅使用一个版本,但我认为这不值得冒险,只是为了拥有稍微简单的修订历史...)