push vs. bundle vs. tar zcvf - 备份整个本地.git

时间:2011-07-15 02:24:18

标签: git

我可以通过两步将它推送到存储库来备份我的本地.git:

git push --all ~/gitrepo
git push --tags ~/gitrepo

我可以使用git bundle备份它。

我可以通过简单地复制整个目录或将其归档(压缩!)来备份它:

tar -zcvf gitrepo.tgz .git

有可能additional方法备份entire本地.git。

现在的问题是它们是否真的相同? (例如,未推送logs子目录)

git push方法与git bundle相比有哪些优势?

可以tar -zcvf被视为“完美的git备份”吗?

3 个答案:

答案 0 :(得分:8)

我使用Git bundle

git bundle create /tmp/backup.git --all --tags --remotes

您可以像回购一样收到它:

cd myworktree
git pull /tmp/backup.git

但也看


完整性,注意事项

对于完整的备份(git-rerere缓存,存储,挂钩,配置文件)我建议使用 rsync

rsync -hxPavilyzH --stats --delete .git/ backup@remote:/repo/mirror.git/

可替换地:

答案 1 :(得分:5)

关于tar:它保存了所有内容:配置(远程URL),reflogs等。如果您不小心在存储库中做了一些非常愚蠢的事情,您可能需要reflog不久后硬盘崩溃了。牵强附会,但tar很容易,它可以做任何事情。使用tar进行备份,使用git push制作镜像。这些是不同类型的任务。

关于压缩:我有一个27M git repo,几乎完全是纯文本,.tar.gz是......也是27M。这不是一大笔积蓄。

答案 2 :(得分:5)

tar方法是可能的,但它不会检查已保存的repo的完整性:在解压缩并尝试克隆或从中获取之前,您不会知道压缩的repo是否有效。

我更喜欢clone --mirror方法(在生成的裸仓库中启用了reflog) 然后简单推送增量备份 正如在old thread中所讨论的那样,备份之前的git stash可能允许您保存更多(索引和工作树状态)