git重新打包:按文件类型和;按组配置包?
有没有办法告诉Git根据文件类型创建packfile,并为这些类/类型指定delta和zlib压缩 我有一个相当大的存储库,其中大部分由图像资产和翻译文件(.po)组成,后者实际上是工作副本和存储库数据的最大部分git重新打包:按文件类型和;按组配置包?,git,git-repack,Git,Git Repack,有没有办法告诉Git根据文件类型创建packfile,并为这些类/类型指定delta和zlib压缩 我有一个相当大的存储库,其中大部分由图像资产和翻译文件(.po)组成,后者实际上是工作副本和存储库数据的最大部分 对于图像资源,delta和zlib压缩都不有用:图像已经被压缩(因此在zlib下它们压缩得不好),而delta压缩在小的更改倾向于通过压缩图像级联时没有任何用处(而且这种情况很少见,通常一旦资产被承诺,它要么永远被搁置,要么被大规模替换) 对于PO文件,虽然它们在技术上是文本文件,但
- 对于图像资源,delta和zlib压缩都不有用:图像已经被压缩(因此在zlib下它们压缩得不好),而delta压缩在小的更改倾向于通过压缩图像级联时没有任何用处(而且这种情况很少见,通常一旦资产被承诺,它要么永远被搁置,要么被大规模替换)
- 对于PO文件,虽然它们在技术上是文本文件,但对于这个特定的存储库,我希望它们的增量压缩非常糟糕:历史生成器/导出器将以基本随机的顺序导出翻译,因此从一个导出到下一个导出,就好像整个文件都被重写了一样
然而,我以前在packfiles中的实验并不顺利。我错过了对这种隔离和配置的内置支持,或者我需要使用低级命令甚至直接使用libgit2手动构建包吗?唉,没有:可用的控件只有以下几项:
:超过此大小的文件不会打包,只会进行zlib压缩core.bigFileThreshold
和几个相关设置:这些设置了所谓的delta岛,如中所述pack.island
这些内容与您想要的内容相差甚远。(注意:还有
core.compression
和两个相关项,但它们是严格全局的,不是每个对象。)您可以通过手动驱动git pack对象来实现这一点
要仅使用PNG文件创建包文件,请执行以下操作:
git rev-list --objects --all | fgrep .png |
git -c core.compression=0 pack-objects .git/objects/pack/pack-png
这将创建一个包文件,其中仅包含文件名包含.png
的blob
上一次调用已将SHA1打印到控制台,称之为$packid
。为避免将来重新打包会破坏您的包,您可以将其标记为保留:
touch .git/objects/pack/pack-png-$packid.keep
后继的
git repack
应将剩余对象收集到不包含任何PNG文件的新包文件中
但是请注意,上面的git rev list
示例并没有遍历reflogs中保存的提交。也就是说,临时保存的提交中使用的PNG文件(永久提交中没有使用)被视为“您的重新生成对象”。谢谢,这很遗憾地证实了我的发现(我之前曾尝试过三角洲岛屿,但这并不是我真正想要的轴心)。