版控

离开学校有段时间了,前些天收到封邮件说我在学校的一个帐号就要到期。一直以来我用这个帐号对各个项目、文章还有代码进行版本控制(version control)。旧的数据备份问题应该不大,可是找寻一个新的稳定的私有版本控制服务成了当务之急。
在昨天研究了半天gitfarm.appspot.com提供的免费服务而相当不甚满意之后,通过阅读了无数的网络文章,今天我终于发掘了一个从保密性、经济适用性和管理性上看都不错的方法。这方法就是利用git的分布式版本控制功能加目前流行的同步存储软件(服务)来实现目的。我所推测能用的同步存储软件包括LiveMesh (Windows),Ubuntu One (Ubuntu Linux)还有DropBox (Windows, Linux, Mac OS)。很显然,从可移植性角度考虑,DropBox是不二选择。
下面咱们就看一下如何用git+DropBox在Linux下实现基于云存储(DropBox目前使用亚马逊的S3作为后台存储)的版本控制。别的软件/系统组合可以类推。
首先相应软件(git, DropBox客户端)需要得以安装,DropBox帐号需要注册,这些自然不必提起。
假设DropBox的本地根目录位于$HOME/Dropbox。咱们首先建立一个名为`myproject.git’的git的远端中心栈(remote central repository):
cd ~/Dropbox
mkdir -p repos/myproject.git
cd !$
git –bare init
至此,一个新的栈已被建立。
然后咱们转到需要导入的项目目录,假设为$HOME/myproject。如果这里还没有建立一个git栈,为之:
git init
git add . # (加入当前目录下所有文件)
git commit -m “A commit message such as ‘init import'”
然后咱们把它和刚才建立的新的栈建立联系:
git remote add dropbox file://$HOME/Dropbox/repos/myproject.git
并把当前分支(master)的数据导入
git push dropbox master
至此咱们大功告成:当前项目目录里的文件已和位于DropBox目录的远端栈同步,而包含远端栈的DropBox下的子目录repos/myproject.git也同步更新了云上的存储。即使不多久本地的myproject下数据有所损坏,咱们仍然可以跟随类似如下的方法将其恢复:在另一台别的电脑上安装DropBox并使用如上的帐号进行同步,假设DropBox的根目录依旧是$HOME/Dropbox,而将要到入项目的目录是$HOME,
cd $HOME
git clone -o dropbox file://$HOME/Dropbox/repos/myproject.git
此举在建立本地栈的同时,也将dropbox和本地的master建立联接。
看来,DropBox还真是个好东西!

另:如果远端的栈在同步的过程中发生了数据损坏,而本地栈的数据完好,一个恢复数据的简单方法是先在本地将远端栈删除
cd $HOME/myproject
git remote rm dropbox
然后清除DropBox里对应远端栈的目录并重新建立栈
rm -rf $HOME/Dropbox/repos/myproject.git/*
cd $HOME/Dropbox/repos/myproject.git/
git –bare init
接着在本地栈重新建立和远端栈的联系并将本地数据导入
cd $HOME/myproject
git remote add dropbox file://$HOME/Dropbox/repos/myproject.git
git push dropbox master

Advertisements

3 Comments on “版控”

  1. bei says:

    leave a message:真不错啊!

  2. enyee says:

    记录着过程,记录着过去,记录着生活,记录着生命。

  3. […] 上次我们讨论过如何用git和dropbox进行可靠节省的版本控制,这次我们来说说如何同时利用数据加密来实现外包的数据安全。 […]


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s