版本控制压缩文件(docx,odt)

Ada*_*deg 20 version-control mercurial zip openoffice.org docx

有些格式实际上是伪装的zip文件,例如docx或odt.如果我将它们直接存储在版本控制中,它们将作为二进制文件处理.我理想的解决方案是

  • 有一个钩子,在提交之前foo.docx/为每个foo.docx文件创建一个目录,将所有文件解压缩到其中
  • 可选地,有一个钩子来重新连接xml文件
  • 有一个钩子,foo.docx可以在更新后从存储的文件中重新创建

我不希望docx文件本身受版本控制.(我知道一个相关的问题,建议使用自定义差异的不同方法.)

这可行吗?这可以用mercurial吗?

更新:

我知道钩子.我对细节很感兴趣.这是一个演示预期行为的会话.

> hg add foo.docx
> hg status
A foo.docx
> hg commit
> # Change foo.docx with external editor
> hg status
M foo.docx
> hg diff
+++ foo.docx/word/document.xml
- <w:t>An idea</w:t>
+ <w:t>A much better idea</w:t>
Run Code Online (Sandbox Code Playgroud)

Dan*_*eny 13

我想知道同样的事情,刚刚遇到了Mercurial 的ZipDoc扩展/过滤器,它似乎就是这样做的!

尚未尝试过,但它看起来很有前途!


Mar*_*ler 5

如果你能够超越成功解压缩和破解Openoffice文档的障碍,那么你应该能够使用我们在Mercurial中的过滤系统.这使您可以在每次读/写库中转换文件.

遗憾的是,您必须做的不仅仅是解压缩foo.docx文件.问题是你需要生成一个文件作为输出 - 所以也许你可以unzip foo.docx然后tar生成生成的文件.然后你将对tarball进行版本控制,这应该可以工作,因为tarball只是所有单个文件与一些元信息的未压缩连接.想想看,一个更简单的解决方案是再次压缩解压缩的foo.docx文件,但不指定压缩.这应该给出与使用tar类似的结果.

解决这个问题是我自己想做的事情,所以请通过向Mercurial邮件列表发送邮件回复.

  • 没有压缩的压缩似乎对odt和docx文件都有效,感谢提示. (2认同)