我们正在合并从主干到分支的更改。当我们这样做时,合并信息会被记录下来。
由于分支中可能还有其他更改,是否有一种安全的方法可以仅提交因合并而受影响的文件(假设没有其他更改)以及合并属性/信息?
" 假设我想将修订版 'r1' 从主干合并到分支。我对 'r1' 进行从主干到分支的合并。现在对于 'r1',在分支文件夹中记录合并信息。如果我做svn diff 在分支中,它显示“。” "
如果您使用的是像 TortoiseSVN 这样的 SVN 客户端,在正常合并中,mergeinfo
将自动更新为根文件夹的文件夹属性,并在文件提交列表期间列出属性更改的文件夹。
如果这不是自动提交的,那么如果您使用 TortoiseSVN 客户端,您甚至可以通过以下步骤手动执行此操作(假设root
作为父级,mytask
作为当前任务分支,subtask
作为已经从当前分支合并的返回分支,并且programs
作为每个分支中的代码文件夹):
programs
分支工作副本上的文件夹,mytask
然后选择选项TortoiseSVN-->Properties
。在新窗口中,如果您之前已经mergeinfo
记录过,那么它将列出svn:mergeinfo
具有类似于以下值的值的属性:
根/程序:1-489
根/任务/我的任务/任务/子任务/程序:380-410
然后您可以执行以下步骤:
a) 通过选择 svn:mergeinfo 项目在窗口中选择选项 Edit-->Advanced 并更新您要提交的合并信息,然后单击“确定”。
在新窗口中,如果您没有任何以前mergeinfo
的 ,那么您可以执行以下步骤:
a) 选择选项New-->Advanced
。
b)svn:mergeinfo
从下拉列表中选择,mergeinfo
在值文本框中添加适当的值并保存。
programs
它将列出programs
要提交的文件中的文件夹,仅更改属性,您可以提交它。另一方面
如果您只想在从父级到工作副本的合并过程中提交合并的文件,并保持本地修改的其他文件未提交,那么,没有直接的方法可以实现这一点。间接方法是保留任务分支 ( ) 的两个单独的工作副本(假设为 copy1 和 copy2 mytask
)并执行以下步骤:
copy1
正在进行所有本地更改,您可以将其搁置一段时间copy2
您分支的新工作副本。copy2
并提交。这可确保您仅将合并的更改提交到服务器,并满足mergeinfo
您的所有需求。copy1
的 SVN 更新,它将从服务器获取新的合并更改到此工作副本。(如果有一些文件在合并过程中更新并且在本地更改过程中也被您更改,那么在此 SVN 更新期间它将发生冲突)。解决冲突,然后您可以继续进行本地更改。这是一个老话题,但是,因为我也需要类似的东西并且在 stackoverflow 上没有找到任何东西,所以这是我的看法:使用 'svn commit --depth=empty folder_with_mergeinfo merge_files'。
就我而言,我正在合并两个分支,如果我尝试“svn ci branch”,它将尝试提交在该分支下修改的所有内容。使用 --depth=empty 可确保仅提交文件夹合并信息和您想要的文件。