我遇到了一些我没想到的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工作副本信息的内容。
你有什么线索吗?谢谢,Rob。
我的一个单元测试涉及一个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工作副本信息的内容。
你有什么线索吗?谢谢,Rob。
hashcheck
显示的校验和与 TortoiseSVN 不一致。查看了 SVN 校验和值,它仍然保持不变。你知道有没有任何客户端能够发出类似于“无论时间戳如何,始终对 *.xls 文件进行校验和”的指令吗? - SiegeX