利用云盘做私人git中心库

[TOC]

使用场景

使用Dropbox和git来管理verilog项目已经有段日子了,总的说来这个方案跟预期的一样非常的好,做为一个git菜鸟来说这一步也算的上是很大的收获。

现在回想起来,之前是怎么管理verilog项目版本的呢?

最早的时候是用最直接的拷项目工程文件夹,这个对磁盘空间损耗很大,一个工程到后来算上数据库文件夹到100多M了,这样拷个几次就轻松弄出G级的空间去了。后来每个历史版本删了数据库文件夹,还是显得大。

然后就到了第二阶段,在工程目录里面建了一个history\文件夹,里面用来放版本文件夹,版本文件夹里面放的是源代码文件、编译出来的烧写文件还有SignalTap调试文件。这个方法比起上面的来那是要好很多了,因此撑了比较久的时间。

后来感觉还是不行,我原先在history文件夹里放置了guide文件用来记录版本信息,后来发现这边操作还是太繁琐,容易出错,guide文件也竟然懒得更新。

所以,我是很需要一个版本管理工具的,总结起来我的需求就是:

  1. 一个自动化的、高效率的版本管理工具;
  2. 能实现版本库的同步,这样我可以在多个电脑上面工作;

实现方案

Github是一个可以满足我需求的工作,我现在已经在用Github来同步我的vimrc和.emacs了。但是可惜的是这个verilog项目不能是开源的,这个方案也就不得行了。

其实我在慢慢接触git的时候,就已经想过Dropbox+git这个组合了,然后网上一查果然是有这种方案的。我当时记录了这么两种方案:

方案一

具体步骤是:

  1. 在Dropbox里面建立裸仓库(这里以Dropbox目录里的git文件夹为例):

     $cd $DROPBOX/git
     $git init --bare prj.git
    
  2. 把建立的库克隆出来:

     $cd .../work_dir
     $git clone $DROPBOX/git/prj.git
    

方案二

  1. 在工作目录里面创建版本库,并提交:

     $git init
     $git add .
     $git commit
    
  2. 在Dropbox里面建立裸仓库:

     $cd $DROPBOX/git
     $git init --bare prj.git
    
  3. 回到工作目录,注册到远程版本库:

     $cd .../work_dir
     $git remote add origin $DROPBOX/git/prj.git
    

这个第一个方案适合一个工程还没建立的时候用,优点是远程版本库clone出来之后已经默认注册了,可以直接使用pushpull了。第二个方案适合对已经存在的工程目录做版本控制,稍微麻烦的一点是还要用git remote add进行远程版本库注册。

看了《git权威指南之后》,知道clone是可以带--bare参数的,所以中可以直接用clone来拷贝裸仓库到Dropbox。

多终端工作

在Dropbox里面建立的远程版本库之后,多终端工作就很简单了。在另外的终端里面用Dropbox进行同步,然后把远程版本库clone出来,剩下的就都是git操作了。

云盘

上面说的都是Dropbox,其实Dropbox换成任意的其他云盘都是可以的。只不过Dropbox有一个共享文件夹的功能,这样就不用直接把自己的Dropbox共享给大家,可以用各自的账号来进行团队协作了。

网上有建议说在Dropbox里面用git的时候最好暂停同步,等git同步完了再开启同步。具体我也不知道会有什么后果,对我来说还是怪怪照做小心为妙。

还有要注意的一点是网盘的冲突问题,网盘的冲突就是同时对网盘的文件进行离线编辑,编辑完保存了再开启同步,这样这么两个文件就产生冲突了。网上说Dropbox的处理方式是复制出一份带冲突字样的文件,这个算是比较稳妥的处理方法了。不过对git来说这个会怎么样呢?不敢想象啊,还是要注意git操作完了随时同步。

我之前有特意用微云做了个冲突测试,结果发现微云也是处理了的,处理方式跟网上说的Dropbox也是一样的。这让我对国内的网盘信心大涨。不过我在微云里面存了近200G的东西了,同步起来建索引都要好久,Dropbox里面基本就只放这几个几M大的版本库,速度还是很快的,Dropbox专门用来做版本控制库也是蛮好的。