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

Amy*_*Amy 2 git

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

  • 使用裸Git存储库设置一个服务器,我将从中拉出并推送到
  • 为第一台服务器上的所有存储库设置几个备份服务器.

所以,假设我的服务器上有一个目录,例如:$HOME/git/,它有裸存储库.例如:

~/git/project1.git
~/git/project2.git
~/git/project3.git
...
Run Code Online (Sandbox Code Playgroud)

我的备份服务器可能是此服务器的镜像,或将备份的数据保存在存档或其他任何内容中.我想我可以这样做:

git clone --bare ssh://gitserver/~user/git/projectX.git
Run Code Online (Sandbox Code Playgroud)

或者可能:

$ cd ~/git/project1.git
$ git bundle create ~/gitbackup/project1.bdl --all
Run Code Online (Sandbox Code Playgroud)

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

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

Von*_*onC 5

一般的想法是:

基于gibak,2008年还有其他技术,但这个想法仍然是一样的.


后接收挂钩示例:

    #!/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