以某种方式将正常压缩文件的“未压缩”版本存储在存储库中是否有意义?
如果是这样,有没有一种标准的方法来实现它? (也许是一个标准的预提交钩子,它将每个这样的文件解压缩到一个特别命名的文件夹中; 和一个post-checkout钩子,将这些特别命名的文件夹压缩成LibreOffice知道如何读写的压缩文件?类似于"Should I decompress zips before I archive?"描述的过程?) (也许黑客攻击版本控制软件的代码,自动解压缩旧版本和新版本,并在解压缩文件之间存储差异,如果失败或没有提供显着的改进,请回到原始存储系统原始文件之间的直接差异,或者直接存储文件?)
我有一组经常编辑的OpenOffice / LibreOffice文件。 我将它们存储在版本控制存储库中 - 正如"Should images be stored in a git repository?"所建议的那样。 虽然我碰巧使用TortoiseHg或SourceTree来访问我的存储库,而不是git。
我碰巧知道Open Office文件实际上是zip压缩容器,里面有一些XML文件。 (我听说许多其他流行的应用程序“二进制文件格式”也是某种形式的zip压缩文件)。
我的理解是即使对这种“二进制”文件的最小改变也会导致存储在存储库中的整个新文件。 与“文本”文件中的小变化相反,这只会导致存储和传输更改。
理论上,这将具有以下优点:
答案 0 :(得分:1)
以某种方式将正常压缩文件的“未压缩”版本存储在存储库中是否有意义?
特别是如果你需要分支和差异,这是有道理的。
此old thread总结了这种情况。
- 对于大小主要由嵌入图像和其他大型对象控制的Openoffice文档,git delta机制已经表现得相当好,因为OO文件是Zip压缩文件,其中每个文件都是单独压缩的。
如果您不更改图像,那么该图像将以相同的方式保存 delta可以完成。- 对于大小以普通内容为主的OO文档,git delta机制无法工作,因为zip压缩引入了“混合”,文档中的一个小变化转换为zip文件中的一个非常大的变化。
醇>可以在提交之前写一个
clean
过滤器来解压缩 但是,在结帐时使用补充smudge
过滤器是一种技巧。如果你没有正确涂抹,git总是会将文件显示为索引更改的文件 正确涂抹意味着使用OO使用的压缩比和压缩方法,这可能有点棘手。我已尝试在clean
和smudge
阶段使用zip二进制文件,但它不能很好地工作。污迹文件总是与原始文件不同。
一个应该可以在较低级别工作,以便更好地控制正在发生的事情(libzip),并在未压缩文件前面添加要在污迹上恢复的压缩参数。然而,更大的问题是,在处理大型OO文件时,干净/涂抹的东西可能会非常慢。