一)git的介绍:
1)假设现在有一个文档,你的老板要求你针对于这份文件进行修改,进行完成的修改的版本是版本1,接下来是文档2,修改完文档2以后,接下来老板还不同意,于是又有了文档三,文档四,但是此时老板说第一个版本的文档是最好的,但是此时最终文档保存的内容是文档四最终的内容,此时想要拿到第一次文档修改的内容是无法拿到的,此时这一份工作就无法完成了,这种情况是针对于一份文档做多次的修改,我们无法针对于不同的文档进行管理,我无法拿到第一次修改的内容,也无法拿到第二次,第三次修改的内容;
2)此时第二次的时候,我的老板有要求再来修改一份文档,此时我们将第一次修改完成的文档是设计文档V1,此时设计文档V1完成以后,老板说你的文档不靠谱,此时你再去给我修改,但是此时我会把文档V1复制一份,此时就得到了另一款设计文档,就是设计文档V2,此时我们手里面就有了两个版本的文档,此时无论是第一个版本的文档还是第二个版本的文档我都有,此时果然当文档2上传的时候老板此时还不满意,我就针对于这个文档反反复复的进行修改,此时已经把设计文档更新到了文档V5,此时老板说你修改的这些文档还不如你当初修改的第一份文档,此时我就把第一份文档开开心心的交给他了,对一个文档进行多个版本的管理,这是仅仅在文档内容比较少的情况下,但是如果文档升级版本过多,此时维护的成本也越来越高,是很有挑战的,各自的版本的修改的内容还是什么还知道吗?
3)版本控制器就由此诞生了, 可以记录每一次代码的改动和版本的迭代都可以记录起来,记录每一次的修改的内容以及版本迭代的一个管理系统,git就是目前最主流的版本控制器,git可以帮助我们控制电脑上所有格式的文件或者是文档,对于开发人员来说,可以管理软件开发中的源代码文件
二)安装git
1)查看git是否已经被安装:git --version
2)卸载git:sudo yum remove git -y
3)安装git:sudo yum install git -y
三)创建git的本地仓库:
1)git是一个版本控制系统也是一个版本控制器,如果记录每一次修改的内容和版本迭代的一些内容,虽然可以使用git追踪管理,但是这些文件内容不可以存放在电脑上面的任意位置,如果这样的话git就不能追踪管理了,如果想要管理这些文件,就需要把这些文件放到仓库中
2)只有在仓库中的文件才能被git追踪并且管理,所以先创建一个文件目录,然后尝试使用命令来创建仓库,git init命令就可以在当前文件目录下创建一个本地仓库,点击回车即可
3)由此可以看出当前目录gitcode下面有叫做.git的目录,这是执行git init命令以后新增的
4)使用tree命令,可以看到在.git/隐藏目录下面有很多东西,这个隐藏目录是用来追踪和管理仓库的,注意不要修改这个隐藏下面的内容,否则会把这个git仓库给破坏掉
5)最后在gitcode目录下面配置name选项和email选项,如果不配置这两个属性,那么将来再进行操作本地文件的时候就会出现问题,下面是命令
git config:git config user.name+"自己的自定义字符串"
查看所有已经被设置过的键值对:git config -l
删除已经的键值对:git config --unset user.name,想把name删除掉
我们在服务器上面不止可以配置一个本地仓库,可以创建多个本地仓库
git config --global user.name "XX",这里面的global表示在当前的服务器上的所有本地git仓库都进行设置生效
git config --global unset --set
四)认识工作区,暂缓区,版本库
在当前的情况下,在gitcode目录下创建一个readMe目录,但是Git是不能管理readMe文件的
.git是仓库,就是版本库(仓库),但是readMe文件本身并没有存在于本地仓库里面
执行tree .git下面的目录如下:是不可以在.git下直接添加文件的
工作区:就是在电脑上写代码或者文件的目录,咱们的git是不可以直接管理工作区的文件的
.git目录:版本库
1)add命令:执行add命令以后会将工作区中的新增,修改删除的内容保存到版本库的暂存区中
2)commit命令:将暂存区的内容存放到master分支下里面也是存放的是修改文件的内容的索引,只有执行commit操作以后才算真正的写入了一个版本库
3)对象库objects:每一次执行add命令以后,修改的工作区的内容会写入到对象库中的一个新的git对象中,这就相当于是维护了工作区的版本,就做好了对于一个文件版本的管理,对应的是.git目录下面的objects目录;
从head指针开始,就可以拿到所有文件修改的内容,就可以拿到master的分支,对应的是.git目录下面的head目录
4)暂缓区:英⽂index,⼀般存放在.git⽬录下的/index⽂件.git/index中,把暂存区有时也叫作索引
5)版本库:也被称之为是仓库,工作区有一个隐藏目录.git,他不算作是工作区,而是git的版本库这个版本库里面的所有文件都是可以被git管理起来的,每一个文件的修改删除,git都是可以追踪的,以便任何时候都是可以追踪历史,或者在将来某一个时刻可以被还原
五)commit add命令
git add readMe,如果要是针对于readMe文件进行了修改,就把readMe文件的修改放在暂缓区中
git add .如果要是针对于工作区中的任意文件进行了修改,就把任意文件的修改放在暂缓区中
git commit -m "描述信息",可以写添加了第一个文件
git log的作用就是看出最近的提交的信息,每一次提交都是随机生成一个ID
或者使用git log --pretty=oneline
查看.git目录下面的HEAD目录下面的内容
cat ./.git/HEAD可以直接看到HEAD指针直接指向MASTER的分支
下面来看一下master中的内容,这里存放的就是最新的提交的修改ID
现在左边执行 cat ./.git/refs/heads/master,然后根据打印出来的ID来找到objects中的git对象
最后通过git cat-file -p+上一步查询出来的ID
可以在最底层看到提交版本时候的描述信息,这个是自己添加的,还包括上一次提交的commitID,还包括是谁修改的版本信息,最上面的tree后面的ID很奇怪,我们打印一下:
这里面的打印出来的内容就是我们在此次版本中新增的文件
我们继续打印一下blob后面的ID的内容:打印出来就是此次对于文件的修改操作,比如说新增加的文件内容,这都会被git记录下来,objects中存放的就是已经被修改的对象库中;
总结:index中存放的就是add后新增的内容(真对于文件来说),master存放的就是最新提交的commitID