一篇文章搞定git
git学习
一、背景(当成故事去读)
Linus 虽然创建了 Linux,但 Linux 的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为 Linux 编写代码,那 Linux 的代码是如何管理的呢?
事实是,在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!
于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。
开发 Samba 的 Andrew 试图破解 BitKeeper 的协议(这么干的其实也不只他一个),被 BitMover 公司发现了,于是 BitMover 公司收回 Linux 社区的免费使用权。
Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 系统的源码已经由 Git 管理了!牛是怎么定义的呢?大家可以体会一下。
Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。
历史就是这么偶然,如果不是当年 BitMover 公司威胁 Linux 社区,可能现在我们就没有免费而超级好用的 Git 了。
二、是什么?(定义/概念)
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
-
工作区(Working Directory)
就是你在电脑里能看到的目录,比如上文中的
gafish.github.com
文件夹就是一个工作区 -
本地版本库(Local Repository)
工作区有一个隐藏目录
.git
,这个不算工作区,而是Git
的版本库。 -
暂存区(stage)
本地版本库里存了很多东西,其中最重要的就是称为
stage
(或者叫index)的暂存区,还有Git
为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。 -
远程版本库(Remote Repository)
一般指的是
Git
服务器上所对应的仓库,github`仓库就是一个远程版本库 -
工作区
、暂存区
、本地版本库
、远程版本库
之间几个常用的Git
操作流程如下图所示:
-
分支(Branch)
分支是为了将修改记录的整个流程分开存储,让分开的分支不受其它分支的影响,所以在同一个数据库里可以同时进行多个不同的修改
-
主分支(Master)
前面提到过
master
是Git
为我们自动创建的第一个分支,也叫主分支,其它分支开发完成后都要合并到master
-
标签(Tag)
标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:
publish/0.0.1
),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动,参见上图中的1.0
/2.0
/3.0
-
HEAD
HEAD
指向的就是当前分支的最新提交
四、怎么样用?(方法)
git clone
:从服务器拉取代码(克隆)git config
:配置开发者用户名和邮箱git branch
git branch daily/0.0.0
: 创建分支git branch -m daily/0.0.0 daily/0.0.1
:重命名分支git branch
:查看当前项目的分支列表git branch -d daily/0.0.1
:删除分支
git checkout
:切换分支git status
:查看文件变动状态git add
:添加文件变动到暂存区git commit
:提交文件变动到版本库git push
:将本地的代码推送到服务器git pull
:将服务器上的最新代码拉取到本地git log
:查看版本提交记录git tag
:为项目标记里程碑
六、特点(优点、合同类型之间的区别)
- 集中式(CVS、SVN)和分布式(Git)
集中式版本控制系统:版本集中存放在中央服务器,使用的时候先down,改完再提交。(我之前也用SVN,没有网是没办法提交的,局域网效率还好,如果是外网而且网速还不好,那真是shei用shei知道!不要不要的!)
分布式版本控制系统:
首先,分布式版本控制系统根本没有中央服务器,每个电脑上都是完整的版本,如果多人协作开发,只要推送各自的修改就行了。但是人多的话,一般还是会有一台充当中央服务器,单纯是为了方便大家修改。
拥有一个强大的分支管理系统
七、git使用规范
阮一峰: http://www.ruanyifeng.com/blog/2015/08/git-use-process.html
八、git教程(很全很受用)
廖雪峰: https://www.liaoxuefeng.com/wiki/896043488029600/900062620154944