我找不到有关如何备份“实时” git 存储库的官方指南。
当你在 Google 上搜索类似内容时,第一个结果是:
https://joeyh.name/blog/entry/difficulties_in_backing_up_live_git_repositories/
甚至 KDE 的粉丝们也采用了一种导致灾难的方法:
http://jefferai.org/2013/03/29/distillation/
我可以阅读 stackoverflow、serverfault 和博客的答案……但在我看来,其中有很多混乱之处。而魔鬼就在细节中:我对“KDE 事件”的理解是,他们应该git fsck
在之后运行git clone
,因为git clone
不检查错误(但同样,git 手册中没有关于此的任何内容……)
那么:备份实时 git 存储库的官方方法是什么?手册中是否有关于备份的内容?
答案1
git 捆绑在这里很有用。我已经用这个有一段时间了:
base_dir=/home/git
for gitrepo in `ls -d *.git`
do
echo '**********[' ${gitrepo} ']***********'
repo_name=${gitrepo%.git}
echo cd ${base_dir}/${gitrepo}
cd ${base_dir}/${gitrepo}
backup_cmd="git bundle create /opt/git-backups/${repo_name}.bundle master"
verify_command="git bundle verify /opt/git-backups/${repo_name}.bundle master"
backup_cmd_all="git bundle create /opt/git-backups/${repo_name}-all.bundle --all"
verify_command_all="git bundle verify /opt/git-backups/${repo_name}-all.bundle "
echo -------- master only -------------------
${backup_cmd}
echo -------- all -------------------
${backup_cmd_all}
echo
echo
done
关键是每隔几周在测试服务器上恢复一次,以测试所有内容。 每次使用时,都要记录一些日志并获取报告,记录生成的文件的校验和、每个文件花费的时间等。 当周围的世界陷入混乱,而您需要恢复时,现在做好准备将为您省去很多心痛。
请记住:在恢复之前,它尚未被备份。
我不确定是否有任何“官方”方法来备份 git repo,有很多方法可以备份 git repo、tar、zip、文件系统转储等,这将在很大程度上取决于备份窗口的大小等因素。