虽然之前弄过了svn,但是最近,老大又要求使用git来进行版本控制。好吧,暂停下手上的项目,折腾下Git吧。
学习的资料就是progit的ebook,写的真的是很好很详细。强烈推荐移步progit去学习下。ebook的最下方可以选择语言,有中文版的。
因为是几个人一起开发的项目,所以就配置了一个私有小规模团队的git。所谓私有,就是每个人都具有读写权限,且不对外公开。所以采用SSH公钥来进行授权。
假设项目中有3个人:
ritter ip:192.168.1.1, tom ip:192.168.1.2 ,jack ip:192.168.1.3。其中ritter的机子为git服务器。
首先,每个人获得自己的ssh公钥,每个人先装ssh:
$ sudo apt-get install openssh-client
$ sudo apt-get install openssh-server
然后执行ssh-keygen命令生成ssh公钥:
$ ssh-keygen
输入完命令后可能会要求输入一些配置信息,可以不输,一路回车到底。
现在,在~/.ssh目录下应该就有一个叫 id_rsa.pub的文件了,用gedit打开:
$ gedit ~/.ssh/id_rsa.pub
将每个人的id_rsa.pub里的内容复制到ritter的~/.ssh/authorized_keys 文件中,包括ritter自己在id_rsa.pub里的内容。
如果在ritter的~/.ssh 目录下没有 authorized_keys文件,可以自己用gedit 新建一个:
$ gedit ~/.ssh/authorized_keys
然后把每个人的id_rsa.pub中的内容拷入即可。这样就配置好了ssh公钥了,只要是在authorized_keys里有公钥的用户,都可以对git仓库读写。
下面就是配置ritter的git仓库了,假如在/work目录下新建project.git:
$ sudo mkdir /work
$ cd /work
$ mkdir project.git
$ cd project.git
进入project.git目录后,可以用 --bare 选项运行 git init 来建立一个裸仓库,这会初始化一个不包含工作目录的仓库:
$ git --bare init
这是,会提示初始化完成,然后就是要向这个裸仓库中加入文件了。
假如是由tom将自己的一个工程 myProject加入仓库中,首先,要进入myProject:
$ cd myProject
使用git init命令将此工程变为git版本控制的目录:
$ git init
执行成功后可以用ls -a命令查看,会有一个隐藏的.git目录,里面就是存储版本控制信息的。
然后执行git add .,注意,add后是空格,然后是一个点,此命令将当前目录下所有文件添加进入暂存区域中去:
$ git add .
此时还需要commit,加参数m后可以加入注释信息:
$ git commit -m 'initail commit'
现在本地的快照就更新了,然后发送到ritter的git服务器里:
$ git remote add origin ritter@192.168.1.1:/work/project.git
其中的origin是自己自定义命名的在git仓库中的分支的名称,此时再push一下,更改就成功了:
$ git push origin master
origin是刚才命名的位于ritter机器中的git服务器里的分支的名称,而master是本地存储的分支的名称,是git init后默认生成的名字。
上面的命令就是将本地分支master里的修改应用进ritter的git服务器里的origin分支里去。至此,git服务器的代码仓库就配置好了。
下面,如果jack要参与开发,就从ritter那clone下来一份代码,假如clone到自己在~/jackProject里,首先进入jackProject目录:
$ cd ~/jackProject
然后执行clone命令:
$ git clone ritter@192.168.1.1:/work/project.git
执行完成后,ritter机子里,刚才tom上传进去的myProject就下载到jack的jackProject目录里了,当然,在clone命令后面可以加上自定义的文件夹名称,
假如要重命名为project:
$ git clone ritter@192.168.1.1:/work/project.git project
这样就可以了。
ritter自己也要参与开发的话,也可以clone到自己的开发目录下面,方法相同。