我有时会在Flash媒体上存储git存储库,这对于创建多个单独的文件很慢,但是编写单个大文件却相当快。存储库是裸存储库,所以它基本上只是.git
文件夹。
每当我推送到这些存储库时,我都注意到git复制了一个包文件,但随后将其解压缩。我真的不希望git解包对象;相反,我希望它能够保持对象的压缩。
有没有办法指示git只能编写packfiles而不解包它们?
答案 0 :(得分:4)
在审核standard config options that git supports时,我碰巧阅读了receive.unpackLimit
的以下说明:
如果推送中收到的对象数量低于此限制,则对象将被解压缩为松散的目标文件。但是,如果接收到的对象的数量等于或超过此限制,则在添加任何丢失的delta基础之后,接收的包将作为包存储。从推送中存储包可以使推送操作更快完成,尤其是在慢速文件系统上。如果未设置,则使用
transfer.unpackLimit
的值。
我在闪存驱动器上配置了一个裸存储库,transfer.unpackLimit
设置为0,随后推送7个对象不会导致解压缩。
答案 1 :(得分:1)
我不是git重新包装的擅长者,但我会尝试查看git-repack。
此脚本用于组合当前不存在的所有对象 住在一个“包”,一个包。它也可以用来重新组织 现有的包装成一个更高效的包装。
包是一组对象,单独压缩,带有delta 压缩应用,存储在单个文件中,带有关联的索引 文件。
包用于减少镜像系统,备份引擎, 磁盘存储等
编辑1 :也许您正在寻找-a
选项:
-a
而不是逐步打包解压缩的对象,打包 所有内容都被引入单个包中。特别有用的时候 打包用于私人开发的存储库,并且存在 无需担心人们通过哑协议获取它。使用 用-d。这将清理git prune留下的对象, 但是git fsck --full显示为晃来晃去。
编辑2 :正如我在评论中所述,这不是一个真正的答案,而是一个可能尝试的指针。
答案 2 :(得分:1)
对于您想要做的事情,一个很好的解决方案可能是bup。 bup的想法是直接编写git pack文件(并且独立于git),这样你就可以使用高效的包文件格式进行备份,而不会出现git在重新打包大型存储库时的性能问题。
bup's README中的“在远程服务器上进行备份”示例中提供了如何在远程git存储库中创建包文件的示例。
作为一个免责声明,我自己没有尝试过,所以也许在你的用例中使用bup存在一些基本问题,但对我来说这似乎是一个好主意。