为什么Subversion无法标记修改后的Microsoft Excel电子表格文件?

我遇到了一些我从Subversion没有想到的行为,几乎意外地发现了这一点:修改后的文件没有被标记为已修改。

我有一个unit testing,涉及一个Microsoft Excel电子表格作为input文件。 unit testing计算CRC校验和; 由于校验和改变,我的testing开始失败。

testing文件存储在SVN中,MIMEtypes为“application / octet-stream”,因此被SVN视为二进制文件。

我从TortoiseSVN和SVN命令行客户端获得了相同的行为,在这种情况下,都是基于SVN 1.6的:当在Excel中打开文件时,它打开的事实必须在文件本身编码; SVN显示该文件已被修改。 但是,当文件再次closures(不保存),它似乎回到其未修改的状态:即, svn status不列出Excel文件; 由于数据是二进制的, svn diff不会产生任何输出。

目前的情况是,该文件现在不是二进制文件与存储库中存储的文件进行比较。 (如果导出的是新副本,与打开和closures的副本不是二进制比较的)。从用户的angular度来看,文件显然是不变的,所以在语义上,SVN响应是合理的。 但不是语法上的; 而SVN本质上是句法。

我找不到原因的部分是为什么SVN不会将文件标记为已修改。 我无法想象SVN对Excel文件有任何特殊的处理(在任何情况下,MIMEtypes都不是专门与MS Excel相关的)。 没有定义SNV关键字属性。 同样,我可以想象,Excel知道存储SVN工作副本信息的隐藏的.svn子目录的内容。

你有什么线索知道这是怎么回事?

谢谢,罗布。

Excel始终locking打开的文件,将时间戳设置为当前date。 如果closures而不保存,Excel将恢复时间戳。 这会导致SVN忽略该文件。

至于变化的内容,我不确定。 你能重现这个问题吗?

Subversion认为“最后修改”时间戳不是说谎。 如果时间戳未更改,则不会检查文件内容是否有更改。 我认为所有的版本控制系统都这样做,否则检查本地修改将会非常慢。

编辑:关于SVN在这方面的工作细节,SVN工作副本库中的questions.c是个不错的开始。

有没有可能文件被locking的Excel中,而它是开放的,SVN不能访问它,看看它是否已经改变?