2010-07-19 65 views
2

我正在將一些svn倉庫移動到Git。所以,我基本上嘗試做的是這樣的:如何爲Git存儲庫組織和設置鏡像備份服務器?

  • 安裝裸Git倉庫一臺服務器從中我會拉和推到
  • 設置幾個備份服務器對所有我的倉庫的是1號服務器。

因此,比方說,我在我的服務器上有一個目錄,如:$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 

,然後從所有項目的所有包拷貝到我的備份服務器。
但是,擁有大量項目的策略將是一項乏味的任務,因此在每種情況下,我都需要製作一些腳本來自動執行任務。

我想知道你們是怎麼做的?也許有更好的辦法來做到這一點,而不是我已經考慮過的。任何提示將不勝感激。

+0

我想你可能是更好的serverfault信息。com – 2010-07-19 20:47:09

回答

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 
+0

感謝VonC,這似乎是一個很好和乾淨的解決方案 – Amy 2010-07-20 15:15:49

+0

這個鉤子只推動當前存儲庫中的一個分支。在我的情況下,我需要備份所有現有的分支,所以它是這樣的:'git push origin',並且沒有BRANCH變量。 – 2014-08-05 09:10:43

+0

@VonC死鏈接... – 2018-01-04 13:43:36

1

似乎沒有什麼特別的東西 - 你只需要一個標準的備份解決方案。

如果我只是需要簡單的備份,我對rsnapshot或rsync有好運。