前言
自我学习过程中,需要使用Git的场景越来越多,因此有必要对其进行进一步的学习。本文主要介绍了对Git的初步认识,包括Git的基本操作与操作原理,理解工作区,暂存区,版本库的含义。
一、Git基本操作
Git是一个版本控制器,记录每次的修改以及版本迭代的一个管理系统,该系统可以控制电脑中所有格式的文档。那么,Git怎样才能进行管理呢?被管理的文件必须放在仓库中,才能被Git进行追踪管理。
1.创建本地仓库
仓库是进行版本控制的一个文件目录。为此,我们要进行文件的版本控制,必须先创建一个仓库。
创建仓库的命令是 git init ,一定注意该命令是在文件目录下执行的。
分别执行如下命令。
mkdir gitcode #创建一个名为gitcode的文件目录
cd gitcode/ #进入gitcode目录
git init #创建仓库
可以看出,当前目录中多了一个 .git的隐藏文件, .git目录是Git进行追踪管理仓库的,无论何时,都不用手动的对其内容做任何的修改,不然该乱了,仓库就被破坏了!!!
2.配置Git
当仓库创建好后,首先要做的就是设置自己的用户名称和email地址,这是非常重要的。至于按照何种规则设置,这是后话了,现在就按照自己的意愿进行设置。
#设置用户名称
git config [--global] user.name 'Your name'
#设置email地址
git config [--global] user.email 'Your email'
#查看配置结果
git config -l
#删除配置
git config [--global] --unset user.name
git config [--global] --unset user.email
–global是一个可选项,使用后,在自己的主机上所有的Git仓库均会采用如下配置。如果不希望这样,也可以不加。
二、工作区,暂存区与版本库
1.初步认识
工作区:在电脑中放代码或者文件的目录。
暂存区:英文名为 stage或者index。 一般存放在.git 目录下的index文件中。
版本库:英文名为 repository。在创建仓库时产生的 .git隐藏目录就是Git的版本库。 版本库中的所有文件均会被Git管理起来,每个文件的修改,删除,Git均能机械能跟踪,以便任意时刻进行历史追踪,或者还原成某个时刻。
图中,,git目录就是版本库,除了该目录,在gitcode目录下的区域就是工作区。
如下,展示了这三种之间的关系。
在创建Git版本库时,会自动创建一个唯一的master分支,以及执行master的一个指针HEAD。 至于其作用是什么,在第三章会给出答案。
当工作区新增或者修改文件执行git add命令时,暂存区的目录树的文件索引会更新。
当执行git commit时,master分支会进行相应的更新,简单理解为暂存区的目录树才真正更新到版本库。
我们可以看出,我们平时在目录下的操作都只是在工作区进行的操作,这些操作并不会被进行记录或者管理,只有经过 git add和git commit后才能将文件添加到仓库进行管理。
2.基本使用
#将工作区的内容提交到暂存区
git add [file1] [file2] .... #添加一个或者多个文件
git add [dir] #添加目录
git add . #将当前目录下的所有改动添加到暂存区
#将暂存区的内容提交到版本库
git commit -m '说明内容'
git commit [file1] [file2] ... -m '说明内容'
将当前目录下的所有改动添加到暂存区,那么什么是改动?
改动: 新增 修改 删除
git commit后有-m选项,后面跟上描述信息,这部分内容是必须要写的,并且要好好进行描述,这是记录自己的提交细节的,是给人看的。
如图,commit后,2个文件改动(新增的文件)。
我们可以用git log 来查看历史提交记录。
#查看历史提交记录
git log
#如果嫌弃信息太多,则添加 --pretty=oneline参数:
git log --pretty=oneline
可以看出,如上有一串特别长的字符串,这实际是每次提交的commit_id(版本号),这是一个很重要的东西,但后面再说。
3.查看 .git 文件
前文说过,git init可以进行仓库的创建,创建后会出现一个隐藏目录.git,通过 tree命令查看 .git目录结构。
- index就是暂存区,add的内容就是放在这里。(此时已经commit,故里面没有内容)
- HEAD是默认执行master分支的指针。
前面说过,这一连串的字符串是commit_id,如果细心观察,就可以发现这与基本使用中第二幅图中的commit_id是一致的,这说明了什么?
=》实际上,master保存的是当前最新的 commit_id。 - objects:包含了创建各种版本库对象及内容,简单理解为存放了git维护的所有修改。
4.进一步理解
进行如下的操作。
touch file3 #新增文件3
git add file3 #将其添加到暂存区
touch file4 #新增文件4
git commit -m 'add file' #暂存区内容提交到版本库
图中可以看出,新增了两个文件,但只显示了一个文件变动,这是为什么? 由前面的知识就知道,这是因为文件4并没有被放入到暂存区,工作区的文件是不会被,git进行追踪管理的。
5.修改文件
git之所以比其他版本控制器优秀,就是其跟踪并管理的不是文件,而是改动。由前文知道,改动是指: 新增,删除,修改。
对readme文件进行一次修改:
这之中对readme进行一次提交,之后新增一行printf,通过git status查看对于上次提交后是否对文件再次修改。
可以看出,readme文件被修改了,但还未进行添加和提交。
目前,只知道文件被修改了,如果想知道具体哪些地方被修改了就更好了。而且如果,代码是好几天前写的,那就更需要了,因为可能已经记不清改动了。
#查看工作区和暂存区的差异
git diff file_name
a表示改动前,b表示改动后。 -表示该动前,+表示改动后。1,2表示行号。知道了修改内容,就可以放心的提交到本地仓库了。