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

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

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

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

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

9个解决方案
81 votes

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

*.xls diff=xls

在.git / config中:

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

当然,我相信你也可以找到其他文件类型的类似工具,使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书中有一个很好的章节:8.2自定义Git - Git属性

1615903 answered 2019-09-11T10:49:13Z
35 votes

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

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

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

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

kirelagin answered 2019-09-11T10:48:28Z
22 votes

在过去的几天里,我一直在努力解决这个问题,并编写了一个小的.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。

Jon G answered 2019-09-11T10:51:21Z
7 votes

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

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

[diff“zip”]

textconv = unzip -c -a
Roberto Cabellon answered 2019-09-11T10:52:05Z
1 votes

我们为Excel工作簿构建了一个开源Git命令行扩展:[https://www.xltrail.com/git-xltrail。]

简而言之,它的主要特点是它使git diff可以处理任何工作簿文件格式,以便它显示工作簿的VBA内容上的差异(在某些时候,我们也会为工作表内容做这项工作)。

它还处于早期阶段但可能有所帮助。

Bjoern Stiel answered 2019-09-11T10:52:44Z
1 votes

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

要访问XML目录(即git-able),必须将.xlsx文件“解压缩”到目录中。 在Windows上快速查看此方法是将文件<filename> .xlsx重命名为<filename> .zip,您将看到内部内容。 我将它与二进制文件一起存储,以便在结帐时,您无需执行其他步骤即可在Excel中打开文档。

g19fanatic answered 2019-09-11T10:53:17Z
1 votes

这个Excel实用程序对我很有用:

Excel版本控制

对于工作簿和VBA宏来说,它是一个非常简单的版本控制工具。 提交版本后,它将保存到PC上的Git存储库中。 我从未尝试过。 SQL模式文件,但我确信有办法解决。

eriklind answered 2019-09-11T10:53:58Z
1 votes

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

thouliha answered 2019-09-11T10:54:25Z
0 votes

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

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

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

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

我的工作版本配置了许多Excel工作簿。 我也使用该文件为非Excel项目打开Git-gui,只需手动添加git文件夹。

stenci answered 2019-09-11T10:55:23Z
translate from https://stackoverflow.com:/questions/17083502/how-to-perform-better-document-version-control-on-excel-files-and-sql-schema-fil