如何在Excel文件和SQL模式文件上执行更好的文档版本控制

我负责几个Excel文件和SQL模式文件。 我应该如何对这些文件执行更好的文档版本控制? 我需要知道这些文件中修改的部分(不同的部分),并保留所有的版本以供参考。 目前我正在附加文件名的时间戳,但是我发现它似乎效率低下。

有什么方法或好的做法来做更好的文档版本控制?

顺便说一下,编辑通过电子邮件向我发送文件。

既然你已经用git标记了你的问题,我假设你在问这个git用法。

那么,SQL转储是正常的文本文件,所以使用git来跟踪它们是非常git 。 只需创build一个存储库并将其存储在其中。 当你得到一个新版本的文件,只需覆盖它并提交, git会为你找出所有的东西,你将能够看到修改date,签出此文件的特定版本,并比较不同的版本。

如果你解压缩, .xlsx也是如此。 .xlsx文件压缩了XML文件的目录(请参阅如何从其内部子组件正确组装一个有效的xlsx文件? )。 Git会将它们视为二进制,除非解压缩。 可以解压缩.xlsx ,并将更改跟踪到归档中的各个XML文件。

你也可以用.xls文件做这个,但是这里的问题是, .xls格式是二进制的,所以你不能从中得到有意义的差异。 但是你仍然可以看到修改历史logging和签出特定的版本。

我在这里写的答案可以应用在这种情况下。 一个名为xls2txt的工具可以提供xls文件的可读输出。 所以简而言之,你应该把它放到你的.gitattributes文件中:

 *.xls diff=xls 

而在.git / config中:

 [diff "xls"] binary = true textconv = /path/to/xls2txt 

当然,我敢肯定,你也可以find类似的工具,以使其他文件types,使git diff办事处文件非常有用的工具。 这是我目前在我的全球.gitconfig:

 [diff "xls"] binary = true textconv = /usr/bin/py_xls2txt [diff "pdf"] binary = true textconv = /usr/bin/pdf2txt [diff "doc"] binary = true textconv = /usr/bin/catdoc [diff "docx"] binary = true textconv = /usr/bin/docx2txt 

Pro Git书有关这个主题的好章节: http : //git-scm.com/book/en/Customizing-Git-Git-Attributes#Binary-Files

在过去的几天里,我一直在努力解决这个确切的问题,并且编写了一个小型的.NET实用程序来提取和规范化Excel文件,以便在源代码pipe理中更容易存储。 我在这里发布了可执行文件:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

..和来源在这里:

https://bitbucket.org/htilabs/ooxmlunpack

如果有任何兴趣,我很乐意使这个更可configuration,但目前,你应该把可执行文件放在一个文件夹(例如源代码库的根目录),当你运行它,它会:

  • 扫描文件夹及其子文件夹中的任何.xlsx和.xlsm文件
  • 将该文件的副本作为* .orig
  • 解压每个文件,然后重新压缩不压缩
  • 漂亮地打印存档中有效的XML文件
  • 从档案中删除calcchain.xml文件(因为它变化很大,不影响文件的内容)
  • 内联任何未格式化的文本值(否则这些保存在查找表中,即使单个单元格被修改,也会导致内部XML发生大的变化)
  • 从任何包含公式的单元格中删除值(因为它们可以在下次打开表单时计算)
  • 创build包含提取的zip压缩文件内容的子文件夹* .extracted

显然不是所有这些都是必要的,但最终的结果是一个电子表格文件,仍然可以在Excel中打开,但更容易区分和增量压缩。 而且,存储提取的文件也使得版本历史中更明显的是在每个版本中已经应用了哪些改变。

如果有什么食欲,我很乐意让这个工具更具可configuration性,因为我想不是每个人都想要提取的内容,或者可能从公式单元格中删除的值,但这些对我来说目前都是非常有用的。

在testing中,一个2MB的电子表格“解包”到21MB,但是之后我能够在1.9MB的mercurial数据文件中存储5个版本,并在文本模式下使用Beyond Compare有效地显示版本之间的差异。

NB虽然我使用的是Mercurial,但是在研究我的解决scheme时,我读到了这个问题,没有任何有关解决scheme的特定于mercurial的问题,应该适用于git或任何其他vcs

正如在另一个答案的评论中提到的,.xlsx文件只是XML。

要到达XML目录(这是git -able),您必须将.xlsx文件“解压缩”到一个目录。 在Windows上查看这个快捷方式是将文件.xlsx重命名为.zip,您将看到内部内容。 我会把它与二进制文件一起存储,这样当你签出时,你不必为了在Excel中打开文档而执行其他步骤。

Tante 在git中pipe理基于ZIP的文件格式非常简单:

打开你的〜/ .gitconfig文件(如果不存在就创build)并添加下面的节:

[diff“zip”]

 textconv = unzip -c -a 

我使用Excel文件的方法与Jon类似,但不是使用原始的Excel文本数据,而是将其导出为更友好的格式。

这里是我使用的工具: https : //github.com/stenci/ExcelToGit/tree/master

您只需要下载.xlsm文件(单击此页面上的查看原始链接)。不要忘记检查自述文件中描述的Excel设置。 您还可以添加代码以将SQL数据导出到文本文件。

该工作簿既是从二进制Excel到文本文件的转换器,也是Windows Git工具的启动器,也可用于非Excel相关项目。

我的工作版本configuration了数十个Excel工作簿。 我也使用该文件来打开非Excel项目的Git-gui,只需手动添加git文件夹即可。

这个Excel工具对我来说工作得非常好:

版本控制Excel

这是一个相当简单的工作簿和VBAmacros版本工具。 一旦你提交了一个版本,它将被保存到你的PC上的Git仓库。 从来没有尝试过。 SQL模式文件,但我相信有一个办法。