我可以通过两步将它推送到存储库来备份我的本地.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备份”吗?
答案 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
可能允许您保存更多(索引和工作树状态)