很长一段时间,我们从trunk进行了所有的开发和部署。过了一段时间,这导致了一个与主干不同步的生产环境,因为我们要求将新功能“B”转移到生产中,但推迟新功能“A” - 基本上我们从主干结账到temp文件夹然后选择性地将文件从temp合并到生产(不受版本控制)
经过长时间的摔跤之后,我终于决定重新安排存储库以允许分支,但我在移动(svn mv)行李箱时犯了一些错误,这样我就可以为分支和标签文件夹腾出空间(以前没有“trunk”文件夹,文件只是位于项目的父文件夹中),最终结果是我的“trunk”现在比我创建的一些分支更新。而现在我似乎无法从分支机构合并回到主干,而不会丢失大量的更改并且会遇到很多冲突。 (我已经从trunk更新了分支。)
如果我在我的主干上运行svn log --stop-on-copy
,最早的版本是r14376,如果我在我的分支上运行它,最早的版本是r14368。 (HEAD在r14710)
如何在不丢失r14368和r14376之间的所有更改的情况下进行正确的合并?我只是要手动合并到trunk,但后来我丢失了分支文件的所有修订历史记录。
答案 0 :(得分:1)
我玩弄了几种不同的编写合并命令的方法,并认为我终于得到了我需要的东西。我基本上颠倒了合并参数的顺序,这样年轻的主干首先跟着旧的分支,然后我将它们合并到trunk的工作副本中:
$ cd trunk
$ svn update
$ svn merge svn://server/project/trunk@14376 svn://server/project/branches/46@14710 .
--- Merging differences between repository URLs into '.':
这导致了一些冲突,其中大部分是关于我刚接受右手副本的图像文件。希望这会让我处于未来分支和合并将正常工作的地方。
答案 1 :(得分:0)
然而我给了你一个问题点,
我的陈述是你应该知道你在做什么。因此,公司里没有人会笨手笨脚...... ......
阅读svn书中的合并:
http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.branchmerge.advanced.advancedsyntax
答案 2 :(得分:0)
如果没有详细了解您的回购活动的详细信息,很难回答,但也许您可以删除当前的“trunk”文件夹,然后将原始的伪干线(即repo root)复制到一个trunk文件夹中。头。我想这会给你原始的伪主干作为一个新的'trunk'文件夹,历史记录完好无损。假设您首先开始在rX中修改repo根,那么命令将是这样的:
svn rm url/trunk
svn commit -m "Removing broken trunk"
svn cp -rX url/@X url/trunk
svn commit -m "Creating new trunk from previous root"
然后,您可以尝试将分支合并到主干中。如果你与中继代码有冲突,请尝试合并所有修订版本减去你引入中继代码的那些版本(我假设,或许是错误的,你将主干更新作为隔离提交)。