我正在将一些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
然后将所有项目中的所有软件包复制到我的备份服务器 但是,拥有很多项目或者策略都是一项繁琐的工作,因此在每种情况下我都需要制作一些脚本来自动完成任务。
我想知道你们是怎么做到的?也许有比我已经考虑过的更好的方法。任何提示都将不胜感激。
答案 0 :(得分:5)
一般的想法是:
git:
protocol or ssh+git:
protocol自动将收到的内容推送到相应的Git备份存储库。还有其他技术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。