SVN将重命名的项目合并到主干中

SVN将重命名的项目合并到主干中,svn,svn-merge,Svn,Svn Merge,我目前正在尝试将分支中的一些更改合并回主干中,分支中的更改以及主干中每个项目的名称。为了简单起见,让我们假设树干的根部看起来像这样 company-name-services company-name-security company-name-web svn cp http://my.server/repos/myRepo/trunk \ http://my.server/repos/myRepo/branches/my-branch 树枝看起来是这样的 services sec

我目前正在尝试将分支中的一些更改合并回主干中,分支中的更改以及主干中每个项目的名称。为了简单起见,让我们假设树干的根部看起来像这样

company-name-services
company-name-security
company-name-web
svn cp http://my.server/repos/myRepo/trunk \
    http://my.server/repos/myRepo/branches/my-branch 
树枝看起来是这样的

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

文件夹company name-*标记为删除,其他已删除的文件夹标记为添加。问题是,已清除项目文件夹中的所有文件都没有与之关联的历史信息,更糟糕的是,主干中发生的更改在已清除项目文件夹中不存在。我认为SVN足够智能,可以从主干引入更改,并在合并后保留历史记录,因为文件夹是使用SVN命令行工具重命名的。我收到的结果是否符合预期,或者我是否应该以其他方式执行合并?

要理解为什么会发生这种情况,您必须了解svn是如何进行合并的

当您将分支合并回主干时,实际上是将分支中所做的所有更改合并到主干中。合并时,svn将从您的分支接收每个提交,并逐个对主干执行相同的更改

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

我相信您可以通过手动将分支中的每个子文件夹合并到主干中相应的子文件夹来克服这一问题。我不知道用于此的陆龟命令,但命令行是这样的(假设您从主干中的根文件夹开始):

>cd公司名称服务
>svn合并-r:头。

等等,对于每个子文件夹

svn mv
创建分支的方法不正确;这是一个动作。您应该使用
svn cp
,它将主干复制到分支中。或者,您也应该先使用TortoiseSVN创建分支,然后再次使用它进行合并

你所做的就是把树干移到树枝上,在树枝上工作,然后把树枝移回到树干上。没有单独的历史可维护


请参见第4章分支和合并,子标题创建分支

很抱歉,我没有必要的代表发表评论

@Ken我可能在我的帖子中不太清楚,我没有使用svn mv创建分支,我使用了Tortoise来分支,我相信这相当于这样的命令

company-name-services
company-name-security
company-name-web
svn cp http://my.server/repos/myRepo/trunk \
    http://my.server/repos/myRepo/branches/my-branch 
在命令行上,然后在分支中,我发出了
svn mv
命令来重命名存储库根目录中的文件夹


@sTendal我早上上班时会尝试你的建议,并给出结果。

你应该能够对自己问题的答案发表评论。第二,如果你有更多的信息,你可以随时编辑你的问题。只需添加一个更新。:)