2011-03-24 58 views
1

我目前正在尝试合并一些分支的更改回树干,分支中的更改debrand中的每个项目的名称。因此,对于纯朴的缘故可以说树干的根部看起来像这样...SVN合并重命名项目到主干

company-name-services 
company-name-security 
company-name-web 

和分支看起来是这样的...

services 
security 
web 

以下命令进行的分支,以便运行以使其进入其当前状态...

svn mv company-name-services services 
svn mv company-name-security security 
svn mv company-name-web web 

随后代码更改发生在分支和中继。现在我正在执行合并,在我的干线工作副本中,我使用了Tortoise SVN合并,选择“重新合并分支”作为合并类型,并选择分支的路径作为“发送URL”作为运行的结果这个我现在已经在我的工作拷贝...

company-name-services 
company-name-security 
company-name-web  
services 
security 
web 

文件夹公司名 - *标记为删除和其他debranded文件夹进行标记以复加。问题是所有文件在已删除的项目文件夹中都没有与它们关联的历史记录信息,甚至更糟糕的变化发生在中继线中不存在于剥夺文件夹中。我认为SVN足够聪明,可以从trunk中引入更改,并在合并之后保留历史记录,因为这些文件夹已使用svn命令行工具重命名。我正在接受的结果是预期还是有其他方式我应该进行合并?

回答

1

为了理解为什么发生这种情况,你必须了解svn如何合并。

当您将分支合并回树干时,实际上会将分支中完成的每个更改合并到树干中。合并时,svn将从您的分支中提取每个提交,并逐个对您的主干执行相同的更改。

由于第一次更改和可能是您对分支做的第一次提交是重命名根目录,因此svn将在trunk上执行相同操作。

我相信你可以通过手动合并你的分支中的每个子文件夹到你的trunk中相应的子文件夹来解决这个问题。我不知道这样做的Tortois命令,但该命令行会是这样(假设你开始在树干的根文件夹):

> cd company-name-services 
> svn merge -r <insert first revision after rename>:HEAD <insert url to sub-folder in branch> . 

等各子文件夹

1

svn mv是创建分支的不正确方法;这一举措。您应该已经使用svn cp,它将树干副本放入分支。另外,你也应该使用TortoiseSVN先创建分支,然后再次使用它来完成合并。

你所做的是将树干移动到树枝上,在树枝上工作,然后将树枝移回树干。没有单独的历史记录要维护。

查看SVN book,特别是Chapter 4, Branching and Merging,子标题Creating a Branch

0

在回答中回复道歉我没有要求的代表评论呢。

@Ken我可能还没有在我的岗位明确,我没有使用svn mv创建我用龟分支issueing我相信会是相当于像这样的命令分支...

svn cp http://my.server/repos/myRepo/trunk \ 
    http://my.server/repos/myRepo/branches/my-branch 

在命令行中,然后从分支内发出svn mv命令,以重命名存储库根目录中的文件夹。

@sstendal当我在早上工作并回复结果时,我会尝试一下您的建议。

+0

你应该能够评论你自己的问题的答案。其次,如果你有更多的信息,你可以随时编辑你的问题。只需添加一个**更新**。 :) – dandan78 2011-03-25 22:13:59