文件在SVN中标记为已修改,但没有更改

时间:2018-05-16 19:35:48

标签: svn tortoisesvn

在我的工作场所,我们使用TortoiseSVN(目前在1.9.6版本上)进行广泛的分支和合并。每隔一段时间,文件将显示在日志中,并作为合并提交的一部分进行修改:

>svn log -r 86212 --verbose
------------------------------------------------------------------------
r86212 | user1 | 2018-05-15 16:18:09 -0400 (Tue, 15 May 2018) | 1 line
Changed paths:
   M /path/to/file/MySpecialFile.pas
   M /path/to/file/ANormalFile.pas

但在MySpecialFile.pas中根本没有任何差异(我可以找到)。文件属性没有改变,没有空格差异,我们只使用Windows操作系统,所以没有理由Unix / Windows行尾不匹配。事实上,如果我使用“Diff with previous version”选项,它会跳过正在修改的版本,并使用SVN diff执行相同的操作:

>svn diff MySpecialFile.pas -r HEAD:PREV
Index: MySpecialFile.pas
===================================================================
--- MySpecialFile.pas (.../path/to/file/MySpecialFile.pas) (revision 86251)
+++ MySpecialFile.pas (.../path/to/file/MySpecialFile.pas) (revision 83226)
@@ -140,11 +140,11 @@

因此文件在r86212中被标记为已修改,但是当我告诉它从HEAD到PREV时,它将r86251与r83226进行比较。

知道造成这种情况的原因以及将来如何预防吗?从技术角度来看,它不会引起任何问题,但每次发生时我都会被要求查看SVN日志,以确保没有任何意外的更改进入代码库。

编辑:我还注意到,在查看TortoiseSVN日志屏幕时,该文件显示为灰色,其中所有其他修改的文件都以蓝色列出,添加的文件为紫色,已删除的文件为红色等。这些与设置>相关。一般>颜色,但我的默认,我没有任何灰色。在特殊情况下,official documentation没有列出有关覆盖颜色的任何内容。

2 个答案:

答案 0 :(得分:1)

尽管运行svn proplist MySpecialFile.pas并没有返回任何内容,但运行svn propget svn:mergeinfo MySpecialFile.pas给了我这个:

  

svn:警告:W200017:财产' svn:mergeinfo'在MySpecialFile.pas上找不到

事实证明,它是在文件上更改的svn:mergeinfo属性。我最终通过选择TortoiseSVN日志中的修订版,然后右键单击该文件并选择"显示属性"来查看该属性。基于答案here,我应该能够从所有文件和子文件夹中删除该属性。

答案 1 :(得分:0)

鉴于你已经排除了大部分可能性,我只能想到一种情况,我相信之前发生过这种情况:

svn property: svn:mime-type

如果文件上有此属性,则说明它是纯文本以外的其他类型。这使得svn无法简单地将diff存储在您的提交中,它可能会认为它已被更改并且每次都将其发送到repo以将其存储为每个修订的单个二进制文件。然而,当进入比较工具时,它足够聪明,理解它实际上是一个纯文本文件,向您显示差异屏幕,但是如果没有实际更改,它会告诉您没有任何进一步混淆您的更改。

如果情况与否,请告诉我,它非常有趣,我很想知道它为什么会发生。