簡體   English   中英

如何為Git存儲庫組織和設置鏡像備份服務器?

[英]How to organize and setup mirrored backup servers for Git repositories?

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

然后將所有項目包中的所有包復制到我的備份服務器中。
但是,如果有很多項目,那么這兩種策略都是一項繁瑣的任務,因此,在每種情況下,我都需要編寫一些腳本來自動化該任務。

我想知道你們怎么樣? 也許有比我已經考慮的更好的方法。 任何提示將不勝感激。

總體思路是:

早在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

這里似乎沒有什么特別的地方,您只需要一個標准的備份解決方案即可。

我對rsnapshot或如果我只需要簡單備份的rsync感到很幸運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM