您(和您的团队)是否在推送之间备份了您的DVCS(Git,Mercurial)存储库的本地签出?你是怎么做到的?如果您的硬盘驱动器在编写了一堆尚未稳定的代码(因此尚未推送)后失败,您将如何获得它?
答案 0 :(得分:4)
我是偏执狂。
除了我们的中央存储库(使用git init --shared --bare
进行设置)之外,我还在网络驱动器上设置了另一个镜像存储库:
cd /network/drive
git init --bare
cd /local/repo
git remote add backup --mirror /network/drive
git push backup
我偶尔会推送到backup
,因为它是一个镜像存储库,它实际上只是我本地存储库的完整克隆。
答案 1 :(得分:2)
是的,您应该在提交之间使用普通的备份系统。
事实上,版本控制与备份无关。我的意思是,你应该为所有员工建立一个备用系统,无论他们是开发人员,秘书,经理还是其他人。无论是否使用版本控制系统,都应备份桌面。
我认为版本控制系统是一个重要的工具,用于构建软件开发并使许多人能够一起工作。当您需要维护多个并行版本或需要调查错误时,它是一个必不可少的工具。您可以使用备份系统来确定何时首次引入错误,但您无法使用备份系统来维护多个并行分支。因此,版本控制系统为您提供的不仅仅是备份系统,备份系统通过处理所有未提交的文件来补充版本控制系统。
现在,您当然希望自己备份存储库。使用分布式版本控制,这非常简单 - 您只需从本地存储库推送到远程备份服务器上的另一个存储库。这样,VCS将负责锁定并确保您在备份服务器上具有一致的状态。
答案 2 :(得分:0)
有趣的是你提出这个问题,因为我上周刚开会,我听说有些人在权威的存储库中使用提交/推送不可运行甚至不可编译的代码来保存它! (注意:它与马克所说的不同)。这对我来说似乎是错误的,因此我们决定安装一个基于rsync的备份服务器,以便开发人员能够意识到补充版本控制和备份工具是如何的,从而阻碍了持续集成。
我还没有安装服务器,但是如果你有一台备用的Unix机器上运行了ssh服务器,那么一个简单的crontab可以完成这项工作,例如:使用ssh和rsync(如果你有一个安装了NFS的分区,它甚至会更简单):
$ crontab -l
# m h dom mon dow command
0,15,30,45 * * * * if `ping -c 1 machine.domaine.com
> /dev/null 2> /dev/null` ; then export SSH_AGENT_PID=
"`pgrep -l ssh-agent | cut -d' ' -f1`" ; export SSH_AUTH_SOCK=
"`/usr/bin/find /tmp -path '*ssh-*' -type s -user name -group
gname -name '*agent*' 2> /dev/null`" ; /usr/bin/rsync -avz -e ssh
--quiet /home/name/src name@machine.domain.com:/home/name/backup/src ; fi
(我假设您可以使用ssh登录计算机,运行ssh-agent并使用ssh-add)。
通过这种方式,每15分钟,正在进行的工作得以保存,并且由于rsync非常快速地计算出已经发生了什么变化,所以它不应该使你的工作站太慢..万一你的磁盘 崩溃,只需登录machine.domain.com,使用备份凭据 :-)并继续工作......
希望它会有所帮助。
干杯,
克里斯托弗。
=安全主要是迷信。它在自然界中不存在。 - 海伦凯勒=