我遇到了一些我没想到Subversion的行为,并且几乎意外地发现了这一点:修改后的文件没有被标记为已修改.
我有一个单元测试涉及Microsoft Excel电子表格作为输入文件.单元测试计算CRC校验和; 由于校验和的变化,我的测试开始失败.
测试文件存储在SVN中,并且具有MIME类型"application/octet-stream",因此被SVN视为二进制.
我从TortoiseSVN和SVN命令行客户端获得相同的行为,在这种情况下都基于SVN 1.6:当在Excel中打开文件时,它打开的事实必须在文件本身中编码; SVN显示该文件已被修改.但是,当文件再次关闭(不保存)时,它似乎返回到未修改状态:即,svn status不列出Excel文件; svn diff由于数据是二进制的,因此无论如何都不产生输出.
问题是该文件现在不与存储库中存储的文件进行二进制比较.(如果导出新副本,则不会与打开和关闭的副本进行二进制比较.)从用户的角度来看,文件显然没有变化,因此从语义上讲,SVN响应是合理的.但不是语法上的; 和SVN本质上是句法的.
我无法找到原因的部分是为什么SVN不会将文件标记为已修改.我无法想象SVN对Excel文件有任何特殊处理(在任何情况下,MIME类型都不是特别与MS Excel相关联的); 没有定义SNV关键字属性.同样,我可以想象Excel知道存储SVN工作副本信息的隐藏.svn子目录的内容.
你有什么线索在这里发生了什么?
谢谢,罗布.
Excel 始终在打开时锁定文件,并将时间戳设置为当前日期。当您关闭而不保存时,Excel 将恢复时间戳。这会导致 SVN 忽略该文件。
至于改动的内容,我不太清楚。你能重现这个问题吗?