1

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

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

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

4

3 回答 3

1

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

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

请参阅SVN 书,特别Chapter 4, Branching and Merging是子标题Creating a Branch

于 2011-03-24T17:58:27.870 回答
1

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

当您将分支合并回主干时,您实际上会将分支中所做的每个更改合并到主干中。合并时,svn 将从您的分支中获取每个提交,并一个接一个地对您的主干执行相同的更改。

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

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

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

依此类推每个子文件夹

于 2011-03-24T17:54:17.583 回答
0

很抱歉在回答中回复我还没有所需的代表发表评论。

@Ken我可能在我的帖子中没有说清楚,我没有使用svn mv创建分支,我使用 Tortoise 来分支发出一个命令,我相信它相当于这样的东西......

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

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

@sstendal 我会在早上上班时尝试您的建议并回复结果。

于 2011-03-24T23:56:53.123 回答