git - Git 可以将 ZIP 文件视为目录并将 ZIP 内的文件视为 blob 吗?

标签 git zip msysgit

场景

想象一下,我被迫处理一些始终存储在 .zip 文件中的文件。 ZIP 文件中的一些文件是小文本文件并且经常更改,而其他文件较大但幸运的是静态文件(例如图像)。

如果我想将这些 ZIP 文件放在 Git 存储库中,每个 ZIP 都被视为一个 blob,所以每当我提交存储库时,ZIP 文件的大小都会增长......即使里面只有一个小文本文件发生变化!

为什么这是现实的

Microsoft Word 2007/2010 .docx 和 Excel .xlsx 文件是 ZIP 文件...

我想要什么

有没有办法告诉 Git 不要将 ZIP 文件视为文件,而是将其视为目录并将其内容视为文件?

优势

但是你说它行不通?

我意识到,如果没有额外的元数据,这会导致一些歧义:在 git checkout 上,Git 必须决定是否创建 foo.zip/bar.txt 作为常规目录中的文件或 ZIP 文件。但是,我认为这可以通过配置选项来解决。

如何实现的两个想法(如果它还不存在的话)

  • 在 Git 中使用 minizipIO::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/

相关文章:

git - 使用 Git 标签 - 无法提取新标签

git - 跨 Windows 和 Linux 的 P4 Root 和 Altroot

python - 使用 Python 从目录创建 zip

windows - Git Windows 命令提示符在 Git 命令期间卡住(结束)

git - 有人可以向我解释 git diff 在这里看到的区别吗?

git - 尝试在 Git 中设置 SVN 存储库

git:显示两次提交之间更改的所有文件

java - 使用Gradle将目录压缩到多个目的地

java - 在 java 中创建 Zip 文件而不使用 byte[]

cygwin - 为什么 Windows Git bash shell 上的 Ctrl-Z 会失败?