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

标签 excel svn

我遇到了一些我没有预料到的 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 子目录的内容的任何信息。

您对这里发生的事情有任何线索吗?

谢谢,罗布。

最佳答案

Subversion 假定“最后修改”时间戳没有说谎。如果时间戳未更改,则不会检查文件内容是否发生更改。我认为所有版本控制系统都会这样做,否则检查本地修改将会慢得难以忍受。

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

关于excel - 为什么 Subversion 无法标记修改后的 Microsoft Excel 电子表格文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730452/

相关文章:

java - 使用 SSL 和证书的 SVNKit 身份验证

python - 如何使用 SVN 和 distutils 为 Python 包分配版本号?

database - 两列的Excel表格查找匹配值

PHP Excel - 您尝试打开的文件 .xls 的格式与文件扩展名指定的格式不同

excel - 在VBA中绘制箭头超出范围

linux - 在 Linux 网络共享挂载上更新 SVN 工作副本

svn - 切换工作副本目录而不更新

linux - 适用于极小(通常是单个文件)项目的最简单的版本控制软件是什么?

vba - Workbooks.Open 填充 "source"而不是 "target"文件

c# - 如何使用 OleDB 避开 Excel 文件中的空行?