svn mergeinfo属性,如何查找,删除或忽略

时间:2014-06-16 12:57:37

标签: svn version-control merge tortoisesvn

我有一个带有标准branches / tags / trunk目录结构的存储库。主干包含一些svnexternals东西(不确定这个问题是否重要,只是指出它以防万一)。

这是一个全新的项目,我们还没有发布到生产版本,所以这个问题并不像几个月那样大。

我正在尝试将我们的主干(开发)中的[修订集]合并到我们的测试分支中。现在,我得到臭名昭着的合并信息错误。有关详细信息,请参阅here。为了暂时解决这个错误,我正在删除测试分支,然后重新创建它。但是,这显然不是一个好方法,特别是在我们开始做越来越多的构建和代码移动到我们的测试分支之后。

所以...我已经浏览了测试分支级别的所有文件夹,以及更高层次的所有文件夹,并且没有设置任何mergeinfo属性。事实上,我发现的唯一属性是我的svnexternals,在一个文件夹上。从我上面的链接中,其他一个选项说明设置ignoreancestry选项。我的Tortoise版本已经默认,但它不起作用。

是否有其他方法可以找到mergeinfo属性,以便删除它?或者,是否有另一种方法可以忽略mergeinfo属性,这样我就可以完成这些合并而不是吹掉我的分支?

编辑:顺便说一下,我正在使用Tortoise版本1.8.4.24972(64位)

Edit2:我正在从TortoiseSVN Gui客户端做一切(我还没有从命令行做过任何事情)

Edit3:嗨大卫,我没有通过命令行做任何事情。这是我尝试过的步骤和错误:右键单击“test”分支,TortoiseSVN - >合并...选择“合并一系列修订”。要合并的URL:..... / trunk,“要合并的修订范围”=“所有修订版”。忽略祖先是真的。当我单击确定时,错误显示:“错误,忽略mergeinfo时无法自动合并”

另外,“我如何创建测试分支?”。如果它已经存在,我打开TortoiseSVN - >回购浏览器。导航到“branches”目录。在右侧窗格中,右键单击“测试”分支,选择“删除”并给出我的评论“合并对于新手很难”。接下来,返回我的源代码所在的Windows资源管理器。右键单击“trunk”,选择“Branches / Tags ...”。选择创建分支/标记的位置,即../branches/test。完成。

1 个答案:

答案 0 :(得分:1)

您是如何创建该测试分支的?

正确的方式

$ svn cp $REPO/trunk/proj $REPO/branches/branch_name/proj

错误的方式

$ svn mkdir $REPO/branches/branch_name/proj
$ svn co $REPO/branches/branch_name/proj      # This will be empty
$ svn export $REPO/trunk/proj                 # Copy in the files from prom
$ svn add -R .                                # Add the files back in
$ svn commit

要进行合并,您需要做三件事:

  • 你要合并的地方。
  • 你要合并的地方。
  • 两者之间的最后一个共同祖先。

当您使用svn cp时,Subversion可以跟踪来自原始分支(或主干)的文件历史记录。当您复制文件并使用svn add -R .时,Subversion认为这些文件与您复制文件的文件完全不同。

当你进行合并,并且分支不正确时,Subversion会遇到很多与本地文件/远程添加错误的冲突,因为Subversion会尝试添加文件到了分支,但已经看到了一个同名的文件。

您是否可以通过添加来创建分支而不是svn cp?您收到的确切错误消息是什么?您使用的是什么版本的Subversion客户端?你是从测试到干线和干线合并到测试还是只有一种方式?你是在挑选修订版吗?


ADDENDUM:嗨大卫,我没有通过命令行做任何事情。

然后,查看该测试分支是如何创建的。这可能有助于解决问题。为test分支选择日志消息。在底部,取消选择复制/重命名停止。然后查看列表中最旧的修订版。我看起来像这样:

Path                 Action    Copy from Path    Revision
-------------------  --------  ----------------  ---------
/branches/5.1/proj   Added     /trunk/proj       12344

请注意路径复制列。这告诉我,通过相当于svn cp命令复制主干来创建分支。如果我关闭停止复制/重命名,我会看到更多的日志,因为历史记录继续沿着分支。

我在TortoiseSVN中看到的一个重大问题是,通过创建分支,然后将 trunk的工作目录中的文件拖到新的分支很容易分支并从菜单中选择 TortoiseSVN->添加

创建分支的正确方法是右键单击 trunk 项目上的存储库浏览器,然后从上下文菜单中选择 copy to ... 。这将向您显示复制到对话框,并键入分支的新URL。

如果您查看显示日志,并且您没有看到从路径中复制列,而是看到每个文件的添加,您知道该分支创建错误。这将导致您的合并出现问题。

怎么办?你无能为力。您可以在合并上忽略历史记录,这可能会有所帮助,但svn:mergeinfo将毫无用处,您必须手动跟踪之前合并的内容。此外,您很可能最终会遇到很多冲突。

为此,请选择正常的合并一系列修订,然后在最后一个屏幕上选择忽略Ancestry

如果您使用TortoiseSVN副本制作分支而不是通过Windows副本添加,则可能还有其他问题。我需要看到你得到的确切错误。有几个问题会导致合并冲突。例如,有人在分支上进行与对Trunk相同的更改。想象一下,有人在树枝上发现了一个问题,修复了它,然后想到我可能会在它上面修理它时。在这种情况下,您将收到冲突,因为添加或删除了相同的文件,或者在同一文件中更改了相同的行。这些类型的变化很容易解决,但很痛苦。

为了不获取这些错误,开发人员应该合并从分支到主干的一个更改(反之亦然),而不是在分支和主干上重复更改。

这有帮助吗?