如何为Git存储库组织和设置镜像备份服务器?

时间:2010-07-19 19:41:50

标签: git

我正在将一些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

然后将所有项目中的所有软件包复制到我的备份服务器 但是,拥有很多项目或者策略都是一项繁琐的工作,因此在每种情况下我都需要制作一些脚本来自动完成任务。

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

2 个答案:

答案 0 :(得分:5)

一般的想法是:

还有其他技术back in 2008,基于 gibak ,但这个想法仍然相同。


收件后挂钩示例:

    #!/bin/sh
    #
    # A hook script that is called after a successful
    # commit is made.
    #
    # Place this file in .git/hooks and chmod +x

    BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    git push origin $BRANCH
    #!/usr/bin/env ruby
    STDIN.read.split("\n").each do |line|
       oldrev, newrev, refname = line.split(' ')

       if refname.match(/^refs\/heads\/(.*)/)
         branch = $1

         `git push origin #{branch}`
       else
         puts "#{refname} was weird, not sure what to do."
       end
    end

答案 1 :(得分:2)

这里看起来没什么特别的 - 你只需要一个标准的备份解决方案。

如果我只需要简单的备份,我就可以运行rsnapshot或rsync。

相关问题