繁体   English   中英

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

[英]svn mergeinfo property, how to find, remove, or ignore

我有一个带有标准branchs / tags / trunk目录结构的存储库。 行李箱包含一些svnexternals的东西(不确定是否对这个问题重要,以防万一。

这是一个全新的项目,我们还没有正式发布产品,因此这个问题的重要性不如几个月之内大。

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

所以...我已经遍历了测试分支级别的所有文件夹,以及更高级别的所有内容,并且没有设置任何mergeinfo属性。 实际上,我发现设置的唯一属性是我的svnexternals,位于一个文件夹中。 在上面我输入的链接中,另一个选项之一是设置ignoregencestry选项。 我的Tortoise版本已经默认,并且不起作用。

还有另一种方法来查找mergeinfo属性,以便可以将其删除吗? 或者,还有另一种忽略mergeinfo属性的方法,这样我就可以完成这些合并,而不必浪费我的分支了?

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

Edit2:我正在使用TortoiseSVN Gui Client进行所有操作(也就是我没有从命令行执行任何操作)

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

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

您如何创建该测试分支?

正确的方式

$ 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客户端? 您是从测试到主干还是从主干到测试合并,还是仅以一种方式合并? 您正在挑选修订版吗?


附录:大卫,您好,我没有通过命令行执行任何操作。

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

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

请注意从路径复制列。 这说明分支是通过等效于svn cp命令的主干复制而成的。 如果我关闭了“ 停止复制/重命名”功能 ,那么随着历史沿分支继续下去,我还会看到更多日志。

我在TortoiseSVN中看到的主要问题之一是,创建分支很容易进行分支 ,然后将主干工作目录中的文件拖到新分支中,然后从菜单中选择TortoiseSVN-> Add

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

如果查看Show log ,但看不到“ 从路径复制”列,而是看到每个文件都有一个添加项,则说明该分支创建不正确。 这将导致您的合并出现问题。

该怎么办? 您无能为力。 您可以忽略合并时的历史记录 ,这可能会有所帮助,但是svn:mergeinfo将无用,并且您必须手动跟踪以前合并的内容。 另外,很有可能您仍然会遇到很多冲突。

为此,选择普通的合并一系列修订 ,然后在最后一个屏幕上,选择忽略祖先

如果您使用TortoiseSVN副本而不是Windows副本并添加来创建分支,则可能存在另一个问题。 我需要查看您得到的确切错误。 有几个问题将导致合并冲突。 例如,某人在分支上所做的更改与对Trunk所做的相同。 想象一下,有人在树枝上发现了一个问题,将其修复,然后以为我不妨在树干上修复它 在这种情况下,由于添加或删除了相同的文件,或者在同一文件中更改了相同的行,您将发生冲突。 这些类型的更改可以轻松解决,但是很痛苦。

为了避免出现这些错误,开发人员应该将分支和主干之间的更改合并 (或者反之亦然),而不是在分支和主干上都进行更改。

这有帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM