【问题标题】:How to organize and setup mirrored backup servers for Git repositories?如何为 Git 存储库组织和设置镜像备份服务器?
【发布时间】:2011-03-18 02:22:04
【问题描述】:

我正在将一些 svn 存储库移至 Git。所以,我基本上尝试做的是:

  • 使用裸 Git 存储库设置一台服务器,我将从中提取和推送到该存储库
  • 为我在第一台服务器上的所有存储库设置一些备份服务器。

所以,假设我的服务器上有一个目录,例如:$HOME/git/,其中包含裸存储库。例如:

~/git/project1.git
~/git/project2.git
~/git/project3.git
...

我的备份服务器可能是该服务器的镜像,或者将备份的数据保存在档案中或其他任何地方。我想我可以这样做:

git clone --bare ssh://gitserver/~user/git/projectX.git

或许:

$ cd ~/git/project1.git
$ git bundle create ~/gitbackup/project1.bdl --all

然后将所有项目中的所有捆绑包复制到我的备份服务器。
但是,如果有很多项目,两种策略都将是一项乏味的任务,因此在每种情况下,我都需要编写一些脚本来自动执行任务。

我想知道你们是怎么做到的?也许有一些比我已经考虑过的更好的方法。任何提示将不胜感激。

【问题讨论】:

  • 我认为您可能是 serverfault.com 上的更好信息

标签: git


【解决方案1】:

一般的想法是:

还有其他技术back in 2008,基于gibak,但想法保持不变。


接收后挂钩示例:

#!/bin/sh # # 成功后调用的钩子脚本 # 提交。 # # 将此文件放在 .git/hooks 和 chmod +x BRANCH=`git 分支 --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` git push origin $BRANCH #!/usr/bin/env 红宝石 STDIN.read.split("\n").each 做 |line| oldrev, newrev, refname = line.split(' ') if refname.match(/^refs\/heads\/(.*)/) 分支 = $1 `git push origin #{branch}` 别的 puts "#{refname} 很奇怪,不知道该怎么办。" 结尾 结尾

【讨论】:

  • 这个钩子只推送一个分支,它是存储库中的当前分支。在我的情况下,我需要备份所有现有的分支,所以它是这样的:git push origin,并且没有 BRANCH 变量。
  • @AndersMetnik 有 8 到 10 年的链接,我并不感到惊讶 ;) 无论如何,我已经恢复了 所有 个链接。
【解决方案2】:

这里似乎没有什么特别之处——你只需要一个标准的备份解决方案。

我在 rsnapshot 或 rsync 上运气不错,如果我只需要简单的备份。

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2013-04-06
    • 2021-01-17
    • 2015-07-16
    相关资源
    最近更新 更多