1

我们有 500 多个 Hg 存储库,并且正在寻找快速有效的备份需求。是否有我们可以用来备份这些存储库的脚本或工具。我们尝试了 Hg bundle、hg clone 和常规文件系统备份,但它们没有帮助。

Hg 存储库备份策略是否有标准做法或一些文档?

一个后续问题,当用户正在推送变更集并且我们开始备份时会发生什么?

我们确实使用 RhodeCode 来发布 Hg 存储库。谢谢

4

2 回答 2

2

没有标准。在推送期间拍摄的真正 FS 级快照会很好,但非即时镜像操作(递归复制)可能最终导致损坏的存储库,尽管它可以修复到推送前状态。

在过去,我做了一些简单的事情:

for repo in $(find /srv/repos -type d -name .hg | sed 's/\.hg$//') ; do
    hg --cwd $repo --repository $repo push ssh://backupserver/$(basename $repo)
done

这会将所有存储库以增量方式推送到远程 ssh 服务器,并具有完全更新同时推送的完整性,并在必要时创建它们。

于 2015-02-19T19:56:30.283 回答
0

我有一个有点类似的从备份服务器克隆/拉取的解决方案,但我在 hg 挂钩上触发了备份。

在主服务器 globalhgrc中,我有:

changegroup.backup = .../backup.sh

和类似的backup.sh东西:

REPO=`hg root`
ts sshpass -p '...' ssh hg@backupserver "~/bin/pull.exp $REPO" 2>> $LOG

Ts(任务假脱机程序)允许操作异步发生。expect 脚本正在处理存储库可能是新的(因此执行hg clone --noupdate)或已经存在的(因此执行hg pull)的事实,并且还可以在请求时为 ssh 密钥提供密码。

只允许备份钩子推送第二台服务器,因此不会发生多头或需要强制的问题。

我发现这种实时备份的有趣之处在于,在主服务器崩溃的情况下,切换到备份服务器应该会快得多。

于 2015-02-23T09:23:17.953 回答