【问题标题】:committing only the svn merge info只提交 svn 合并信息
【发布时间】:2013-03-18 14:27:23
【问题描述】:

我们正在合并从主干到分支的更改。当我们这样做时,合并信息会被记录下来。

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

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

【问题讨论】:

  • “其他变化”是什么意思?您的工作副本中的更改不属于该分支?
  • @TobiasZander 是的。分支中与合并无关的其他文件的更改。问题是,我们可以单独提交文件,但不能只提交合并属性/信息
  • 我不确定我是否正确理解了您的问题。如果您只想提交合并信息,只需在提交时取消选择所有其他文件。如果您只想合并特定修订,您也可以在选择时仅选择这些修订。你用什么svn客户端?
  • @TobiasZander 假设我想将修订版“r1”从主干合并到分支。我为“r1”从主干合并到分支。现在对于'r1',在分支文件夹中记录了合并信息。如果我在分支中执行 svn diff,它会显示“。”已修改,并显示“r1”是合并属性的一部分。现在我如何提交由于“r1”仅被合并而修改的文件,以及显示“r1”的合并属性。这有帮助/有意义吗? :|
  • 我想您的问题是,您的分支工作副本有一些本地未提交的更改,并且您希望在同一个工作副本上合并来自父级的一些修订(在您的问题中提到为 r1)。但是,在提交时,您只需要提交合并的文件,而不是在合并操作之前存在的本地未提交的文件。我是否正确理解了您的问题?

标签: svn merge mergeinfo


【解决方案1】:

如果您使用的是 TortoiseSVN 等 SVN 客户端,在正常合并中,mergeinfo 将自动更新为根文件夹的文件夹属性,并在文件提交列表期间列出属性更改的文件夹。

如果这不是自动提交的,那么如果您使用 TortoiseSVN 客户端,您甚至可以按照以下步骤手动执行此操作(假设 root 作为父级,mytask 作为当前任务分支,@987654324 @ 作为当前分支的已合并后分支,programs 作为每个分支中的代码文件夹):

  1. 右键单击分支mytask 的工作副本上的programs 文件夹,然后选择选项TortoiseSVN-->Properties
  2. 在新窗口中,如果您已经记录了以前的mergeinfo,那么它将列出属性svn:mergeinfo,其值类似于以下值:

    根/程序:1-489

    root/task/mytask/task/subtask/programs:380-410

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

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

  3. 在新窗口中,如果您没有以前的mergeinfo,则可以进行以下步骤:

    a) 选择选项New-->Advanced

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

  4. 通过单击programs 文件夹执行SVN 提交,它会在文件中列出programs 文件夹,只需更改属性即可提交。

另一方面

如果您想在从父级到工作副本的合并过程中只提交合并的文件,并保持本地修改的其他文件未提交,那么,没有直接的方法可以实现这一点。间接方法是保留任务分支 (mytask) 的两个单独的工作副本(假设为 copy1 和 copy2)并执行以下步骤:

  1. copy1 正在进行所有本地更改,您可以将其搁置一段时间
  2. SVN 签出您分支的新工作副本copy2
  3. 将父级的更改合并到copy2 并提交。这可确保您仅将合并后的更改提交到您想要的所有 mergeinfo 的服务器。
  4. 然后转到您的copy1,进行 SVN 更新,它会将新合并的更改从服务器获取到此工作副本。 (如果有一些文件在合并过程中更新并且在本地更改过程中也被您更改,那么在此 SVN 更新期间它会发生冲突)。解决冲突,然后您可以继续进行本地更改。

【讨论】:

    【解决方案2】:

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

    就我而言,我正在合并两个分支,如果我尝试“svn ci 分支”,它将尝试提交在该分支下修改的所有内容。使用 --depth=empty 确保仅提交文件夹合并信息和您想要的文件。

    【讨论】:

    • 这似乎没有提交更改的文件。
    • 它应该,如果你像我的评论所说的那样将它们添加到 svn 命令行。当然,这仅在您没有更改太多文件的情况下才实用。
    • 抱歉,我认为行太长了,folder_with_mergeinfomerged_files 之间没有空格。
    猜你喜欢
    • 2013-04-27
    • 2011-09-04
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2011-11-06
    • 2010-11-17
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多