【发布时间】:2011-12-21 13:08:09
【问题描述】:
场景
想象一下,我不得不处理一些始终存储在 .zip 文件中的文件。 ZIP 文件中的一些文件是小文本文件并且经常更改,而其他文件较大但幸运的是相当静态(例如图像)。
如果我想将这些 ZIP 文件放在 Git 存储库中,每个 ZIP 都被视为一个 blob,因此每当我提交存储库时,存储库的大小都会随着 ZIP 文件的大小而增长......即使里面只有一个小文本文件发生了变化!
为什么这是现实的
Microsoft Word 2007/2010.docx 和 Excel .xlsx 文件是 ZIP 文件...
我想要什么
有没有办法告诉 Git 不要将 ZIP 文件视为文件,而是将其视为目录并将其内容视为文件?
优势
- 存储库更小,即传输/备份更快
- Display changes with Git to ZIP files 会自动工作
但是你说它行不通?
我意识到,如果没有额外的元数据,这会导致一些歧义:在git checkout 上,Git 必须决定是将foo.zip/bar.txt 创建为常规目录中的文件还是 ZIP 文件。不过,我认为这可以通过配置选项来解决。
如何实现的两个想法(如果尚不存在)
- 在 Git 中使用
minizip或IO::Compress::Zip等库 - 不知何故添加了一个文件系统层,以便 Git 实际上将 ZIP 文件视为目录
【问题讨论】:
-
.docx文件的场景是有意义的,但在许多其他情况下,您可能需要考虑使用 git 正常跟踪单个文件,并且只构建生成的.zip使用适当的构建工具,例如make。 -
考虑到看起来彼此不同的两个 zip 文件可以保存完全相同的数据(例如,使用两种不同压缩级别压缩两次的文本文件),这变得更加棘手。虽然用很少的信息很容易表示解压缩文件的两个版本之间的差异,但我想用尽可能少的信息表示两个版本的存档之间的差异(这基本上是 git 必须做的) -微不足道。
-
您是否最终得到了Jeff's answer 或其他任何东西的实施解决方案?我想知道除了for tar archives之外基本相同,这应该会产生一个兼容的答案......
-
SAP 的信息设计工具 (IDT) 为其
UNX格式创建了类似的文件结构。它也是递归的:它包含一个BLX文件和一个DFX文件,它们都是档案,分别对应的是“业务层”和“数据基础”。我也想要一个解决方案。 -
Jetbrains 内置 VCS 确实允许您查看 zip 类型的文件。非常有用,但需要您查看,例如IDE 中的 PR。现在微软已经接管了,我们也可以在 github pr diff 中看到这一点。