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