Windows 下 Dropbox + Git 构建分布式多人协作版本控制系统
参考了网上许多人的方法,现在总结下。
1. 前置条件
安装Git,Git的下载地址http://code.google.com/p/msysgit/downloads/list
拥有Dropbox帐号,并安装客户端。
2. 共享文件夹
在Dropbox中共享一个文件夹给好友,如Repos,用来放远程的Git repository,好友间通过共享该文件夹来达到repository同步的目的。
3. 在第1台设备中建立项目的repository
进入自己的项目的目录,如MyProject文件夹下,右键打开Git Bash,输入以下命令来初始化Git repository
git init
然后克隆一份存放到Dropbox下的Repos文件夹中。
git clone --bare . F:/Dropbox/Repos/MyProject.git
如果路径名出现空格,如F:/New File/,需要加引号"F:/New File/"。MyProject.git其实是一个文件夹,也可以使用其它的命名方法。
创建一个远端repository,指向Dropbox下的Repos文件夹中的Myproject.git,这样就可以将变更push到这个远端的repository,以及从这个远端的repository pull变更了。
git remote add MyProject F:/Dropbox/Repos/MyProject.git
现在就可往这个远端repository push你的代码了。但是在Push之前,需要先提交代码。可以右键打开Git Gui,先点缓存改动,在点提交就可以了。这时数据并没有同步到远端的repository,也就是Dropbox中,只是提交到了本地的工作区中。这时需要点上传,或者在Git Bash中输入以下命令来push,master指的是主分支。执行完这一步就会发现Dropbox在上传文件了。
git push MyProject master
4. 在其它设备中建立项目的repository
在这台设备的Dropbox中应该可以看到共享的Repos文件夹。找一个工作目录,也就是你要存放项目代码的目录,然后右键打开Git Bash,输入以下命令,将repository克隆过来,这时会在当前文件夹下建立一个该项目的目录。这时可以看到,在第1台设备中的代码已经出现在该工作目录下了。在Git Gui中显示的远端repository的名字为origin。
git clone F:/Dropbox/Repos/MyProject.git
5. 其它注意事项
1. 当Dropbox同步Repos文件夹时,本地工作目录里的repository并没有自动同步,也就是说需要手动pull,也就是从远端的repository(Dropbox\Repos文件夹)pull到本地的工作目录中。
pull的方法有两种:
1)可以在本地的工作目录中右键打开Git Bash,输入以下命令
git pull MyProject master
2)在本地的工作目录中右键打开Git Gui,选择远端->从...获取(fetch)->MyProject,然后点合并->本地合并。
2. 有时候如果设备A和B间同时push,且都变更了代码,Dropbox同步有时间差,可能会导致出现拷贝冲突。
- 也就是设备A里的代码,没有同步到设备B中,同样B中的代码也没有同步到A中。此时在设备A中pull时会出现fatal: Reference has invalid format: ...,fata: The remote end hung up unexpectedly,设备B可以正常pull,但是没有设备A中提交的代码。
- 这时只需要删除设备A中(无法pull的那台设备)Dropbox\Repos\MyProject.git\refs\heads中冲突的master文件(如果是主分支的话),然后再重新pull(此时已可以pull了),这时设备B中的代码就会同步到A中了。
- 然后再执行一次push(也就是Gui里的上传),将设备A因为冲突而没同步的代码同步到Dropbox中。
- 设备B等Dropbox同步后,再pull一次就可以将A中的代码同步过来了。