感谢支持
我们一直在努力

Ubuntu下Git配置学习笔记

虽然之前弄过了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到自己的开发目录下面,方法相同。

下面就是开发时的配合了:

假如,jack比较积极,他要先改动代码,首先,他在clone下来的工程的目录里执行git log:


& git log


此时,log中仅有initial commit这一个log,是由tom在初始化git服务器代码仓库时添加的。


此时,jack在工程里新建了一个文件newFile:


$ gedit newFile


然后,用git status命令查看:


$ git status


会提示newFile没有更新,此时执行git add命令:


$ git add newFile


然后,再用git status命令查看状态,此时会提示没有提交,于是执行提交命令,并添加log信息:


$ git commit -m ‘add a newFile’


此时,就提交成功了,本地的快照已经被更新过了,但是,请注意,现在,只是jack本地的master分支被更新过了,远端ritter机子里的origin分支还未被更新,需要push一下:


$ git push origin master


以上命令就是将本地master分支里的修改也合并到远端origin分支里面去,此时,远端的origin也更新好了。


 



这时,tom也做了一定的修改,然后按照刚才jack的流程,想把自己本地的master分支合并到origin分支里:


$ git push origin master



此时,会报错,原来origin分支已经被jack修改过了,tom要先更新一下才行,于是,tom先把远端的origin分支拉下来:


$ git fetch origin


然后,和本地的master分支合并一下:


$ git merge origin/master


现在,用git log查看下log信息,就会发现Log记录已经变成两条了,一条是自己初始化时写的initial commit,一条是jack写的add a newFile


然后,就可以push了,将自己在本地合并好的master分支push到origin里:


$ git push origin master


大功告成。


以上就是一个简单的git使用流程,个人建议常常使用git status来查看当前状态,一般都还会有进行下一步操作的提示信息哦。


想要了解更多信息,直接去progit上学习吧。

更新于 2012-4-10



关于回滚和分支:


在使用git的过程中,难免出现新提交的版本有些问题,需要换回以前的版本的情况,这时,我们首先用git reflog查看版本信息:


$ git reflog


然后一系列的HEAD会列出:


0a50072 HEAD@{0}: checkout: moving from master to develop
0a50072 HEAD@{1}: checkout: moving from testing to master
0a50072 HEAD@{2}: checkout: moving from master to testing
0a50072 HEAD@{3}: merge origin/master: Fast-forward
ec51f11 HEAD@{4}: commit: add “initial code” on screen
57f3086 HEAD@{5}: clone:


选择想要回滚到的版本,假如回滚至commit: add “initial code” on screen时期的版本:


$ git reset –hard HEAD@{4}


就可以了,此时查看git log,就是以前的版本了。


当然,我们在更新自己的代码时,可以采用分支,来避免这种需要回滚的情况,在与远端origin分支合并之前,可以先新建一个分支,假如命名为develop:


$ git branch develop


此时,用git branch命令查看本地分支:


$ git branch


会显示两个分支,*表示当前工作的分支:


develop
* master


用git checkout develop可以将工作分支切换成develop,再git branch查看下:


$ git checkout develop


*号就在develop前了:


* develop
  master
这样,就可以将远端origin分支合并进入master里,而自己依旧继续在develop分支里工作。


git am patch打不上时,可以先用git am –abort清除掉之前的残留,然后使用git am –reject先打上部分patch,然后再根据自动生成的.rej文件,手动修改。

赞(0) 打赏
转载请注明出处:服务器评测 » Ubuntu下Git配置学习笔记
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏