疯狂猪宝宝的专栏

我要讲什么

最近十多天我借助《GIT权威指南》,学习了下GIT。以前学习一些新技术新工具,我都没有总结过自己对新东西的理解,这次我想尝试写一篇博文,整理自己对GIT的认知过程。我是一位SVN用户,所以我会从SVN用户的角度出发,通过对比的方式让大家了解GIT。

为什么要学习GIT

GIT的优点很多,Google一下,,会有很多人告诉你。而我想从侧面来讲一讲为什么应该学习GIT。GIT是由Linux之父Linus开发的一款版本控制系统,被誉为Linus的第二个伟大的作品。很多优秀的项目都在使用Git作为版本控制系统:Linux、Eclipse、Android、perl等等,Git不仅可用于管理重量级的项目,也轻松地可以管理小型的团队或个人项目。很多优秀的公司都已经从SVN迁移到GIT。总总情况表明,GIT是一种先进生产力的代表,身为一名优秀的程序员,学习先进生产力是我们的光荣传统,是帮助我们晋升的有效途径。

也许你无法改变公司使用SVN的做法,但是你可以使用GIT作为客户端来操作SVN服务器。也就是说在公司使用SVN的情况下,你个人可以使用GIT,两全其美。

像SVN一样使用GIT

初学者可以回忆svn的使用过程,借此了解Git的基本命令。

1) 首先要初始化一个git工作区

git init workspace

或者

git clone url workspace

2) 完成你的开发任务

Todo your develop job…

3) 将新增/修改/删除的文件告诉GIT

git add filename

4) 提交修改到版本库

git commit –m commitMsg

查看提交历史:git log 比较文件差异:git diff 是否有文件需要提交:git status

这就是你最常用的GIT指令,是不是很简单?

GIT如何做到分布式版本控制

GIT是一个分布式版本控制系统,也就是说他可以在无网络的环境下完成提交,他是怎么做到的?这其中的奥秘在于,GIT的版本库存在于本地环境中,位于工作区的.git目录下。在使用GIT开发时,提交行为(git commit)是将开发成果提交到本地版本库。如果想要让他人可以看到你的开发成果,还需要将其推送到远程版本库(git push)。

GIT如何协同开发

获取远程版本库的最新提交:git fetch 与本地提交合并:git merge / git rebase 推送本地提交到远程版本库:git push

合并: 本地版本库的分支和远程版本库的分支存在一一对应关系,当获取到远程版本库的最新提交并与本地提交合并时,实际上是两个分支的合并。Git提供了两种合并方式:树状合并(git merge)和线性合并(git rebase)。

比如合并origin和mywork分支

git merge的合并方式:

git rebase的合并方式:

冲突: GIT中冲突的解决和SVN是类似的。

GIT的优点

GIT优点很多,但我认为重要的有两点

对提交的控制 在推送到远程版本库之前,可以灵活地控制提交历史。比如改变提交说明,合并某几次提交,删除提交,在两次提交中间插入其他的提交等等。

对分支合并的处理 可以把分支B的某几个提交拣选合并到分支A(git cherry-pick),分支A/B树状合并(git merge),分支A/B线性合并(git rebase),分支B插入到分支A的中间(git rebase),等等。

你需要了解GIT细节

掌握Git的一些细节,可以帮助你更好的记忆、学习、使用Git。我认为必须要掌握的细节有:

GIT工作区/暂存区/版本库: git add 是把文件/目录添加到暂存区,git commit是把暂存区的文件/目录提交到版本库

GIT对象模型:

GIT中的对象包括:提交(commit),文件树(tree),文件内容(blob),里程碑(tag) Head是头指针,指向当前分支 Remote/branch是分支引用,指向最新的一次提交

git reset: 修改分支引用,指向某次提交,默认影响暂存区

git checkout: 修改Head引用,指向某个分支或提交,默认影响暂存区和工作区

使用GIT的工作流程

使用GIT时建议用如下的方式来建立分支:

主分支 开发完成的特性分支或者修复的bug使用merge方式合并到主分支,主分支不进行开发。

特性分支 为每个功能新建一个特性分支,特性分支中使用rebase线性合并提交历史。

Bugfix分支 修复bug新建bugfix分支。

参考资料 《GIT权威指南》 Practical tips for using Git with large Subversion repositories

想要成功,就一定要和成功的人在一起,不然反之

疯狂猪宝宝的专栏

相关文章:

你感兴趣的文章:

标签云: