场景
想象一下,我被迫处理一些始终存储在 .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 文件视为开始的目录
最佳答案
这不存在,但它很容易存在于当前框架中。正如 Git 在执行差异时以不同方式显示二进制或 ASCII 文件一样,可以通过配置界面告诉它对某些文件类型提供特殊处理。
如果您不想更改代码库(尽管这是一个很酷的想法),您也可以使用 pre-commit and post-checkout hooks 为自己编写脚本。解压缩并存储文件,然后在 checkout 时将它们恢复为 .zip 状态。您必须将操作限制为仅由 git add
指定的那些文件 blob/索引。
无论哪种方式都需要一些工作——这只是其他 Git 命令是否知道正在发生的事情并正常运行的问题。
关于git - Git 可以将 ZIP 文件视为目录并将 ZIP 内的文件视为 blob 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8001663/