git 快速上手
# git
# 什么是 git
git 是什么?
git 是目前最先进的分布式版本控制系统。
什么是版本控制?
简单来讲,就是字面意思,控制一个程序,或者一个文档的版本。
通过这种方式来维护文件的不同的版本,是非常困难的。
所以,我们需要一个专门的工具来帮助我们来维护文件的版本。
这个就叫做版本控制。
分布式?
有分布式,就有集中式。最早的版本管理系统就是集中式的。
集中式版本控制的缺点非常明显。一旦中央服务器宕机了,数据就全部丢失了。
- 存在宕机的风险
- 必须要联网
- 速度慢
后面就出现了分布式的版本控制工具。
分布式的版本控制工具,每个人的电脑都有一份完整的数据拷贝,相比集中式,不用再担心宕机的问题。
# git 的诞生
很多人都知道,Linus 在 1991 年创建了开源的 Linux。从此,Linux 系统不断发展,已经成为最大的服务器系统软件了。
Linus 虽然创建了 Linux,但 Linux 的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为 Linux 编写代码,那 Linux 的代码是如何管理的呢?
事实是,在 2002 年以前,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!
你也许会想,为什么 Linus 不把 Linux 代码放到版本控制系统里呢?
不是有 CVS、SVN 这些免费的版本控制系统吗?
原因是因为 Linus 坚定地反对 CVS 和 SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。
有一些商用的版本控制系统,虽然比 CVS、SVN 好用,但那是付费的,和 Linux 的开源精神不符。
不过,到了 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满。
于是 Linus 选择了一个商业的版本控制系统 BitKeeper,BitKeeper 的东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。
但是,安定团结的大好局面在 2005 年就被打破了,原因是 Linux 社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。
开发 Samba 的 Andrew 试图破解 BitKeeper 的协议,被 BitMover 公司发现了,于是 BitMover 公司愤怒的要收回 Linux 社区的免费使用权。
本来,Linus 可以向 BitMover 公司道个歉,保证以后严格管教弟兄们,然后大家握手言和既往不咎来着。
但是,实际情况是:
Linus 表示:呸!老子就不!然后花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git。一个月之内,Linux 系统的源码就已经由 Git 来管理了!
牛是怎么定义的呢?大家可以体会一下。
Git 出现之后,迅速成为最流行的分布式版本控制系统。尤其是在 2008 年,GitHub 网站的上线,为开源项目免费提供了 Git 的存储,无数开源项目开始迁移至 GitHub,包括 jquery,PHP,Ruby 等。
历史就是这么偶然,如果不是当年 BitMover 公司威胁 Linux 社区,可能现在我们就没有免费而超级好用的 Git 了。
# git 安装
直接从官网下载即可。
安装完成之后,可以进行简单的配置。
git config --global user.name "your name"
git config --global user.email "your email"
2
Unix 的哲学,“没有消息就是好消息”。
准备工作已经完成。
# 使用本地仓库
在介绍本地仓库的使用之前,先介绍一下 git 的整个工作流。
- workspace:工作区
- Index:暂存区
- Repository:本地仓库
创建一个空文件夹,然后 cd 进去,使用 git init 来初始化这个目录。
当我们在项目目录下面创建了新的文件后,如果想要将这个文件保存到仓库里面,需要经历两个步骤:
- 添加至暂存区
- 由暂存区添加至本地仓库
// 提交到暂存区
git add 文件名
2
// 提交到仓库
git commit -m "本次提交的说明"
2
# 修改文件
// 查看当前的仓库状态
git status
2
// 查看当前文件的修改内容
git diff 文件名
2
总之,修改文件后,也不要忘了提交到本地仓库。
# 删除文件
如果只是在本地工作区删除文件,那么这个文件还存在于本地仓库。可以从本地仓库恢复删除文件的。
// 恢复工作区删除的文件
git checkout -- 文件名
2
如果想要彻底删除,应该将删除的这个动作也像新增内容一样提交给仓库。
git add test.txt
git commit -m "delete file"
2
# 版本回退
当我们对文件做了很多次修改以后,某些时候可能需要回退到某一个版本。
// 打印出提交的记录
git log
2
如果我想进行一个版本回退
git reset --hard hash值
整个本地仓库的操作就介绍这么多。