svn状态结果中的_M是什么意思

yin*_*nwu 5 svn

我使用“svn merge”命令将代码更改从分支合并到主干。合并完成后,我发现一些在分支中未修改的文件在主干中被标记为“M”。我比较这些文件并得到以下结果(例如);

xxxxx$ svn diff knife.sh

Property changes on: knife.sh
___________________________________________________________________
Modified: svn:mergeinfo
    Merged /branches/development/LTE1227/knife.sh:r12198-14851
Run Code Online (Sandbox Code Playgroud)

当我提交代码时,我发现这些文件在 svn editor() 中被标记为“_M”,如下所示

   2 --This line, and those below, will be ignored--
   ... ...
   10 _M   xxx.sh
   11 _M   knife.sh
   ... ...
Run Code Online (Sandbox Code Playgroud)

svn编辑器中的_M是什么意思?我不想提交这些更改,如何从提交列表中删除这些“_M”文件?

Pat*_*irk 5

这意味着该文件有属性更改,在您的情况下,它是属性svn:mergeinfo。在 SVN 1.7.0 中,引入了一个 API 来区分对文件内容或其 SVN 属性的修改。虽然属性更改看起来像这样:

_M   knife.sh
Run Code Online (Sandbox Code Playgroud)

纯文本修改看起来像您所期望的那样:

M   knife.sh
Run Code Online (Sandbox Code Playgroud)

svn:mergeinfo当您从不同的源合并到文件时,即从主干合并到分支时,该属性将添加到文件中。SVN 使用此信息来记住已合并和尚未合并的内容,因此不会再次合并。

通常最好保留它(假设您有一个最近的版本,其中修复了一些经常出现的错误),但如果您真的想摆脱它,您可以恢复该文件。如果已经提交,请使用以下propdel命令:

svn propdel svn:mergeinfo knife.sh
Run Code Online (Sandbox Code Playgroud)