git bundle create ../`basename $PWD`.all.gitbundle --all
在一个Git代码库中,创建的捆绑文件大小约为4.8MB。当我压缩整个代码库文件夹时,生成的文件大小为26.2MB。
基本上,我想找到一种备份整个代码库而不丢失任何信息的方法。但考虑到存档文件大小差异,我认为
git bundle
并不能备份所有内容或比简单的压缩更有效。请问有人可以解释一下吗?
git bundle create ../`basename $PWD`.all.gitbundle --all
git bundle
并不能备份所有内容或比简单的压缩更有效。http://progit.org/2010/03/10/bundles.html
这意味着该 bundle 不会包含过时的对象等,这些对象将成为您的仓库的一部分。此外,您不应计算仓库工作目录中的实际文件,而只应计算 .git
中的对象和其他元数据,因为正是这些元数据包含在 bundle 中,而不是它们原始形式的文件。
对于备份,您可以考虑使用 git clone --mirror
选项或仅存档仓库。bundle 不是 repo 的可行备份选项,因为您将丢失配置、reflog、过时的对象等。
我认为git使用zlib进行压缩。
zip
在大小方面并不是最好的存档格式。zlib
使用delta-compression进一步减小了文件大小,这是它的原理(感谢维基百科):
增量编码是一种以顺序数据之间的差异而非完整文件的形式存储或传输数据的方法。
这可能解释了你的文件大小很小的原因。我尝试对生成的git捆绑包进行file
操作,结果显示该捆绑包只是原始数据。
我不认为使用git-bundle
来维护您的存储库备份是一个好主意。要么创建一个裸仓库,并将您想要在备份中跟踪的 refs 推送到该仓库,要么使用好老旧的 tarballs。两者之间的区别在于推送允许您仅备份选择性分支。例如,您可能希望在备份中忽略暂存分支。压缩存储库会毫不保留地备份每一件事--包括您的 stash、未跟踪的文件、对象文件和任何临时编辑器文件。
我通常只是压缩整个存储库。您可以运行git-clean -fdxn
,然后再运行git-clean -fdx
,仔细清除您存储库中未存储的所有内容。如果您确实坚持在执行备份时进行大小效率(您不应该这样做;让 Git 自己处理这个问题),那么您可以在备份之前进行垃圾回收,甚至可以修剪您的 reflog。但是,您知道,我不会这样做。存储成本如今很便宜,而这样做只会导致备份价值的降低。