是否有可能指示git只写包文件?

时间:2011-09-09 18:24:23

标签: git

我有时会在Flash媒体上存储git存储库,这对于创建多个单独的文件很慢,但是编写单个大文件却相当快。存储库是裸存储库,所以它基本上只是.git文件夹。

每当我推送到这些存储库时,我都注意到git复制了一个包文件,但随后将其解压缩。我真的不希望git解包对象;相反,我希望它能够保持对象的压缩。

有没有办法指示git只能编写packfiles而不解包它们?

3 个答案:

答案 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存在一些基本问题,但对我来说这似乎是一个好主意。