第一部分:Git 原理入门
Git 是最流行的版本管理工具,也是程序员的必备技能之一。
即使天天使用它,很多人也未必了解它的原理。
Git 为什么可以管理版本?git add、git commit这些基本命令,到底在做什么,你说得清楚吗?
这篇文章用一个实例,解释 Git 的运行过程,帮助你理解 Git 的原理。
• Workspace:工作区
• Index / Stage:暂存区
• Repository:仓库区(或本地仓库)
• Remote:远程仓库
一、新建代码库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
首先,让我们创建一个项目目录,并进入该目录。
mkdir git-demo-project
cd git-demo-project
我们打算对该项目进行版本管理,第一件事就是使用git init命令,进行初始化。
git init
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
ls -ah
.git
二、工作区(Working Directory)和版本库(Repository)
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learnGit文件夹就是一个工作区:
文件保存好之后,还需要通知 Git 哪些文件发生了变动。所有变动的文件,Git 都记录在一个区域,叫做"暂存区"(英文叫做 index 或者 stage)。
版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为叫stage(index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
我们编写一个readme.md
文件,内容如下:
Git is a version control system.
Git is free software.
第一步,用命令git add
告诉Git
,把文件添加到暂存区:
git add readme.md
第二步,用命令git commit
告诉Git,把文件提交到仓库:
git commit -m "wrote a readme file"
简单解释一下git commit
命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.md文件);2 insertions:插入了两行内容(readme.md有两行内容)。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区(stage