[英]How to organize and setup mirrored backup servers for Git repositories?
我正在將一些svn存儲庫移至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
然后將所有項目包中的所有包復制到我的備份服務器中。
但是,如果有很多項目,那么這兩種策略都是一項繁瑣的任務,因此,在每種情況下,我都需要編寫一些腳本來自動化該任務。
我想知道你們怎么樣? 也許有比我已經考慮的更好的方法。 任何提示將不勝感激。
總體思路是:
git:
protocol或ssh+git:
protocol將收到的任何內容自動推送到相應的Git備份存儲庫。 早在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.