Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Subversion无法标记已修改的Microsoft Excel电子表格文件?_Excel_Svn - Fatal编程技术网

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

为什么Subversion无法标记已修改的Microsoft Excel电子表格文件?,excel,svn,Excel,Svn,我遇到了一些Subversion没有预料到的行为,并且几乎是偶然地发现了这一点:修改过的文件没有被标记为已修改 我有一个单元测试,涉及一个Microsoft Excel电子表格作为输入文件。单元测试计算CRC校验和;由于校验和更改,我的测试开始失败 测试文件存储在SVN中,具有MIME类型“application/octet stream”,因此SVN将其视为二进制文件 我从TortoiseSVN和SVN命令行客户端获得了相同的行为,在这种情况下,两者都基于SVN 1.6:当文件在Excel中打

我遇到了一些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。

文件是否可能在打开时被excel锁定,而svn无法访问该文件以查看其是否已更改

Subversion假设“最后一次修改”时间戳没有说谎。如果时间戳未更改,则不会检查文件内容的更改。我认为所有版本控制系统都会这样做,否则检查本地修改的速度会慢得令人无法忍受


编辑:有关SVN在这方面如何工作的详细信息,在SVN工作副本库的源代码中是一个良好的开端。

Excel总是在打开时锁定文件,将时间戳设置为当前日期。当您关闭而不保存时,Excel将恢复时间戳。这会导致SVN忽略该文件


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

我认为MS应用程序通常表示锁定在一个单独的隐藏文件中(类似于
~file.doc
),但我认为Excel是不同的。锁定是一个线索,但我认为这不是全部,我不认为访问被阻止。(我需要做更多的实验。)正是我要建议的-检查时间戳:-)我遇到了一些奇怪的问题,没有正确设置,与此非常相似。再次,这是一个很好的建议。谢谢我想我已经看到时间戳更新了。我想知道Excel是否会在打开时更改时间戳,但在关闭时会在不保存的情况下重新更改时间戳。稍后我将再次(更仔细地)检查。我正好碰到了这个问题,
hashcheck
将显示一个不同的校验和,但TortoiseSVN不会报告它。查看SVN校验和值,它保持不变。您知道有哪个客户机能够在不考虑时间戳的情况下,始终对*.xls文件执行校验和操作吗?@SiegeX:没有,但是您可以通过自己更改时间戳来强制SVN进行完全比较。编写一个脚本,在给定目录中的每个xls文件上轻推时间戳应该不会太难。谢谢。是的,这个问题是可以重现的。这听起来像是一个可能的解释;在我对Wim回复的评论中,我基本上是这么说的,但最好能独立观察到这一点。我会(明天上班时)检查一下。只是告诉康妮:这正是发生的事情。打开Excel文件时,文件内容会发生变化(如md5sum),修改时间也会发生变化。关闭文件而不保存时,文件内容不会更改,但也不会恢复到原始状态;修改后的时间确实恢复到打开前的值。刚刚发现:看起来Excel保存了打开程序的名称(可能更多),即使您没有保存。“奇怪!”马林发现,这肯定是问题所在。我看到的唯一解决方法是1)告诉Excel停止修改封面下的文件,或2)更改时间戳,或3)让SVN客户端强制重新计算*.xls文件的校验和,而不考虑timpstamp值。不幸的是,我不知道怎么做这些事情,你呢?