捆绑和压缩git repo有什么区别?

时间:2011-10-03 19:51:54

标签: git

当我执行

git bundle create ../`basename $PWD`.all.gitbundle --all

在git存储库中,创建的捆绑包文件的大小约为 4.8MB 。当我压缩整个存储库文件夹时,生成的文件 26,2MB

基本上我寻找一种方法来备份整个存储库而不会丢失任何信息。但考虑到归档文件大小的差异,我认为git bundle不会备份所有内容,也不会比简单的zip更有效。

有人可以解释一下吗?

3 个答案:

答案 0 :(得分:2)

  

bundle命令将打包通常的所有内容   用git push推过电线

http://progit.org/2010/03/10/bundles.html

这意味着捆绑包不会有过时的对象等,这些对象将成为您的存储库的一部分。此外,您不应该计算repo的工作目录中的实际文件,而只应计算带有对象和其他元数据的.git,因为捆绑包将包含这些文件,而不是原始形式的文件。

对于备份,您可以使用git clone --mirror选项查看,或者只是按照您的方式存档回购。捆绑包不是回购的可行备份选项,因为您将丢失配置,reflog,陈旧对象等。

答案 1 :(得分:1)

我认为git使用zlib来压缩。

但是,就大小而言,

zip并不是最好的归档格式。 zlib使用delta-compression来进一步缩小尺寸,这就是这个(感谢维基百科):

  

Delta编码是一种以顺序数据而非完整文件之间的差异形式存储或传输数据的方式

这可能会占你的小文件大小。我在排泄的git包上尝试了file,它说捆绑只是原始数据。

答案 2 :(得分:1)

我发现git-bundle不是维护存储库备份的好主意。创建一个裸存储库并将其推送到您希望在备份中跟踪的引用,或者使用旧的tarball。两者之间的区别在于推送允许您仅备份选择性分支。例如,您可能希望忽略备份中的临时分支。压缩存储库将直截了当地备份所有内容 - 包括存储,未跟踪文件,目标文件和任何临时编辑器文件。

我通常只拉链整个东西。您可以运行git-clean -fdxn然后git-clean -fdx来仔细清除存储库中未存储的所有内容。如果你在执行备份时确实坚持大小效率(你不应该这样做;只是让Git担心这个问题),那么你可以在备份之前进行垃圾收集,甚至可以修剪你的reflog。但是你知道,我不会。这些天存储很便宜,这样做只会损失备份的价值。