仅提交svn合并信息

时间:2013-03-28 08:13:37

标签: svn merge mergeinfo

我们正在合并从主干到分支的变化。在我们执行此操作时,会记录合并信息。

由于分支中可能存在其他更改,是否有一种安全的方法只提交由于合并而受影响的文件(假设没有其他更改)以及合并属性/信息?

“假设我想从主干到分支合并修订版'r1'。我从主干到分支为'r1'进行合并。现在对于'r1',在分支文件夹中,记录合并信息。我在分支中做了一个svn diff,它显示了'。'已修改,并显示'r1'是合并属性的一部分。现在我如何提交由于'r1'仅被合并而修改的文件,以及合并属性'r1'。“

2 个答案:

答案 0 :(得分:1)

如果你正在使用像TortoiseSVN这样的SVN客户端,那么在正常合并中,mergeinfo将自动更新为根文件夹的文件夹属性,并且会在文件的提交列表中列出具有属性更改的文件夹

如果您的提交没有自动生成,那么即使您使用TortoiseSVN客户端(假设root为父,mytask作为当前任务,您甚至可以通过以下步骤手动执行此操作branch,subtask作为已合并的当前分支的后分支,programs作为每个brach中的代码文件夹):

  1. 右键单击分支programs的工作副本上的mytask文件夹,然后选择TortoiseSVN-->Properties选项。
  2. 在新窗口中,如果您之前已记录mergeinfo,则会列出属性svn:mergeinfo,其值与下面的值类似:

      

    根/节目:1-489

         

    根/任务/ mytask /任务/子任务/节目:380-410

    然后您可以执行以下步骤:

    a)通过选择svn:mergeinfo项目在窗口中选择Edit - > Advanced选项并更新要提交的mergeinfo,单击“确定”。

  3. 在新窗口中,如果您之前没有mergeinfo,那么您可以执行以下步骤:

    a)选择选项New-->Advanced

    b)从下拉列表中选择svn:mergeinfo,在值文本框中添加相应的mergeinfo并保存。

  4. 通过单击programs文件夹进行SVN Commmit,它会在文件中列出programs文件夹,只提交属性更改,您可以提交。
  5. 另一方面

    如果您想在从父级到工作副本的合并期间仅提交合并文件并保持本地修改的其他文件不提交,那么,没有直接的方法来实现这一点。间接方式是保留任务分支(mytask)的两个单独的工作副本(让我们说copy1和copy2)并执行以下步骤:

    1. copy1正在进行所有本地更改,您可以暂时搁置一段时间
    2. SVN签出您分支机构的新工作副本copy2
    3. 将您父项的更改合并到copy2并提交。这可确保您仅将所有mergeinfo的合并更改提交到服务器。
    4. 然后转到您的copy1,进行SVN更新,它将从服务器到此工作副本获得新的合并更改。 (如果有些文件在合并期间更新并且在本地更改期间由您更改,则在此SVN更新期间它将发生冲突)。解决冲突,然后您可以继续进行本地更改。

答案 1 :(得分:1)

这是一个古老的主题,但是,因为我还需要类似的东西,并且在stackoverflow上没有找到任何东西,这是我的看法:使用'svn commit --depth = empty folder_with_mergeinfo merged_files'。

在我的情况下,我正在合并两个分支,如果我尝试'svn ci branch',它将尝试提交在该分支下修改的所有内容。使用--depth = empty可确保仅提交文件夹合并信息并提交所需的文件。