码迷,mamicode.com
首页 > 其他好文 > 详细

GIT总结

时间:2015-02-28 21:39:03      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:git   git入门   git-svn   入门   svn   

我要讲什么

最近十多天我借助《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优点很多,但我认为重要的有两点

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

  2. 对分支合并的处理
    可以把分支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时建议用如下的方式来建立分支:

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

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

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

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

GIT总结

标签:git   git入门   git-svn   入门   svn   

原文地址:http://blog.csdn.net/darwinchina/article/details/43990183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!