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

Mar*_*ton 96 versioning git version-control ms-office

我负责几个Excel文件和SQL模式文件.我该如何对这些文件执行更好的文档版本控制?

我需要知道这些文件中修改过的部分(不同部分)并保留所有版本以供参考.目前我在文件名上附加时间戳,但我发现它似乎效率低下.

有没有办法或好的做法来做更好的文档版本控制?

顺便说一句,编辑通过电子邮件发送给我文件.

161*_*903 85

我在这里写的答案可以应用于这种情况.名为xls2txt的工具可以提供.xls文件的人类可读输出.简而言之,您应该将它放到.gitattributes文件中:

*.xls diff=xls
Run Code Online (Sandbox Code Playgroud)

在.git/config中:

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt
Run Code Online (Sandbox Code Playgroud)

当然,我相信你也可以找到其他文件类型的类似工具,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
Run Code Online (Sandbox Code Playgroud)

Pro Git书中有一个很好的章节:8.2自定义Git - Git属性

  • 回复:xls2txt:极其不愿意从波兰语网站安装封闭源代码工具。这可能是同一回事吗?https://github.com/hroptatyr/xls2txt虽然没有自述文件... (3认同)
  • 在Windows7上对我不起作用。我已经从此处下载了适用于Windows的catdoc版本:http://blog.brush.co.nz/2009/09/catdoc-windows/,而不是如上所述编辑gitconfig和属性。但是我仍然得到:diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binary文件a / src /.../ test.xls和b / src /.../ test.xls不同的GIT版本:1.7.6.msysgit.1 (2认同)

kir*_*gin 40

既然你用标记了你的问题,我假设你正在询问Git的用法.

好吧,SQL转储是普通的文本文件,所以用Git跟踪它们是完全合理的.只需创建一个存储库并将其存储在其中.当你获得一个新版本的文件时,只需覆盖它并提交,Git会为你找出一切,你将能够看到修改日期,检查这个文件的特定版本并比较不同的版本.

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

您也可以使用.xls文件执行此操作,但问题是.xls格式是二进制的,因此您无法从中获得有意义的差异.但您仍然可以看到修改历史记录和结帐特定版本.

  • 是的,我知道git.我认为git在跟踪SQL方案时很好.至于Excel文件(.xlsx和.xls),因为它们是二进制文件,使用git跟踪它们无法向我展示在人类视角中已修改的内容.这就是我困惑的地方. (3认同)
  • @MarcusThornton` .xlsx`是XML,所以应该可以正常工作.通常,没有办法轻松比较两个`.xls`文件.你可能可以添加一个预先提交钩子,它会在它附近放一个`.csv`,你就可以对它们进行区分. (2认同)

Jon*_*n G 22

在过去的几天里,我一直在努力解决这个问题,并编写了一个小的.NET实用程序来提取和规范化Excel文件,使它们更容易存储在源代码控制中.我在这里发布了可执行文件:

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

..和来源:

https://bitbucket.org/htilabs/ooxmlunpack

如果有任何兴趣我很乐意使其更易于配置,但目前,您应该将可执行文件放在一个文件夹(例如源库的根目录)中,当您运行它时,它将:

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

显然,并非所有这些都是必要的,但最终结果是仍然在Excel中打开的电子表格文件,但更适合于差异和增量压缩.此外,存储提取的文件也使得在版本历史中更明显地在每个版本中应用了哪些更改.

如果有任何胃口,我很高兴使该工具更具可配置性,因为我猜不是每个人都想要提取的内容,或者可能从公式细胞中删除的值,但这些对我来说都非常有用.

在测试中,一个2 MB的电子表格"解包"到21 MB,但随后我能够在1.9 MB Mercurial数据文件中存储五个版本的每个版本,每个版本之间有很小的变化,并使用Beyond Compare有效地可视化版本之间的差异.文字模式.

注意:虽然我正在使用Mercurial,但我在研究我的解决方案时读到了这个问题,并且没有任何关于该解决方案的Mercurial特定内容,应该适用于Git或任何其他VCS.


Rob*_*lon 7

Tante 在Git管理基于ZIP的文件格式非常简单:

打开〜/ .gitconfig文件(如果已经存在则创建)并添加以下节:

[diff"zip"]

textconv = unzip -c -a
Run Code Online (Sandbox Code Playgroud)

  • 然后,Peng Xu扩展了解决方案,允许使用过滤器对基于zip的文件进行版本控制,此外只查看差异更改:https://tante.cc/2010/06/23/managing-zip-based-file-formats-在-混帐/#评论 - 63391 (3认同)

tho*_*iha 5

使用打开的文档扩展名.fods。它是 Excel 和 LibreOffice 都可以打开的简单、未压缩的 XML 标记格式,并且差异看起来不错。