目录
前言
版本控制器
Linux下的Git的安装
Git的基本操作
创建Git本地仓库
配置Git
工作区、暂存区、版本库
添加与提交
查看.git文件
前言
我们可能要写多个文档对一个产品进行描述,但是一般情况下我们可能要写多个文档,比如:
- 初始文档(版本1)
- 修改文档1(版本2)
- 文档max(版本3)
- 文档promax(版本4)
- ......
问题:随着版本数量的不断增多,可能会忘记对每个版本的进行修改的内容,文档如此,我们所写的项目代码也是有这样的问题存在的
版本控制器
基本概念:目前最主流的版本控制器就是Git,Git可以控制电脑上所有格式的文件,如:doc、excel、dwg、dgn、rvt等等,对开发人员来讲,Git最重要的就是可以帮助我们管理软件开发项目中的源代码文件
功能:可以记录工程的每一次改动和版本迭代的一个管理系统,同时也方便多人协同作业
注意事项:所有的版本控制器,只能跟踪文本文件的改动(TXT文件、网页、所有的程序代码等)它可以告诉你每次的改动内容(比如在第8行新增了一个单词“Linux”,在第10行删除了一个单词“Windows”)而图片、视频等二进制文件,虽然也能由版本控制器控制,但是无法跟踪文件的变化,只能把二进制文件每次的改动串起来(仅知道图片从100kb大小改成了120kb大小)其余的就不知道了
Linux下的Git的安装
安装指令:sudo yum install git -y
版本查询指令:git --version
卸载指令:sudo yum remove git -y
Windows下Git的安装:安装git和图形化界面工具_哔哩哔哩_bilibili
Git的基本操作
创建Git本地仓库
基本概念:git的本地仓库是进行版本控制的一个文件目录,对文件进行版本控制一定要创建它
创建指令:git init
注意事项:
1、git本地仓库要在一个空目录中创建
2、git本地仓库是一个隐藏文件
3、.git文件是Git用来跟踪和管理仓库的,不要修改这一文件
4、gitcode不是本地git仓库,.git才是
配置Git
配置用户名称的指令:git config [--global] user.name "自定义名称"
配置e-mail地址的指令:git config [--global] user.email "自定义邮箱地址"
删除配置指令:git config --unser user.(name、email等)
列出当前Git仓库的配置项:git config -l
注意事项:
1、一个服务器中可以创建多个本地仓库
2、--global指令会使得本地服务器中所有的Git仓库都会使用当前的配置内容,如果希望在不同仓库中使用不同的name或email可以不要该选项
3、执行对Git仓库的命令时必须在该仓库所在的目录下
4、在全局范围内充值配置指令
- git config --global --upset user.(name、email等等)
工作区、暂存区、版本库
工作区:电脑上要写代码或文件的目录(gitcode是工作区)
暂存区(索引):一般存放在.git目录下的index文件中(.git / index),git add后的文件会被添加至此(但不会显示)
版本库(仓库):工作区的隐藏文件.git不工作区而是Git的版本库,该库中的所有文件都可以被Git管理,每个文件的修改、删除、Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来的某个时刻进行“还原”
注意事项:
1、Git版本库中最重要的就是缓存区
2、在创建Git版本库时,Git会自动创建一个唯一的master,及指向master的指针HEAD
git add 目录路径
3、对工作区的文件执行git add时,暂存区会更新
4、执行git commit时,暂存区的内容会被真正的写到版本库中,master同时也更新
5、stage和maseter中存放的是索引,真正的文件位于object库中
6、HEAD是指向master的指针,master中存放最新一次提交的文件的id
7、新建或粘贴进.git所在目录的文件,并不能称之为向仓库中新增文件,只是在工作区新增了文件,必须要通过git add和git commit命令才能将文件添加到仓库中进行管理
8、每个id对应一个Git对象,该对象放在object库中,利用id可以找到objec库中的对象
9、id = 所处文件夹名称“前两位” + 文件名“后三十八位”
添加与提交
添加指令:git add 文件名 (将指定文件添加)
提交指令:git commit "对修改文件的描述(这个文件干了什么事)"
查看提交记录指令:git log [--pretty = oneline]
注意事项:
1、可以一次添加一个或多个文件到暂存区
git add 文件名1 文件名2 ...
2、添加指定目录到缓存区,包括子目录
git add 目录路径
3、添加当前目录下的所有文件改动到缓存区
git add .
4、提交暂存区的全部内容到master(实际上这时才算进入版本库)
git commit -m "message"
5、提交暂存区的指定文件到master(实际上这时才算进入版本库)
git commit 文件名1 文件名2 ... -m "message"
6、-m后必须跟"message",message由用户自行填写,且绝不能省略,要好好描述,它是用来记录提交细节的,是给用户看的
git commit -m "add my first file"
7、git log 查看从近及远的提交记录,且能看到我们"message"中的内容
8、如果嫌弃输出信息太多,可以尝试加上--pretty = oneline,将这些消息在一行显示
9、 id(版本号)是一个SHA1(散列算法1)计算出来的一个非常大的数字,用十六进制表示
查看.git文件
查看git树指令:tree .git
查看对象指令:git cat-file -p id
- git log查看提交记录,找到某一批次提交的id(commit id)
- git cat-file -p id查看该批次提交的相关内容
- parent:上一批次提交的id
- author:文件创建者
- committer:文件提交者
- tree(tree id):存放该批提交的文件的所有文件的id(blob id)
对tree id进行cat-file -p可以得到该批次所有修改的文件的blob id
这些id都可以在.git的tree中找到(为什么file123文件的id相同我也不知道):
再次使用git cat-file -p id可以查看这些文件中的真正的内容:
结论:git log查看的是每一批内容提交时所给的id(特指commit id),每一批中可能有很多内容这些内容又有自己对应的id(特指blob id)git cat-file -p 查看commit id得到一个tree id,查看tree id得到多个blob id,查看blob id得到具体内容
~~~~~~git log 得到 commit id~~~~~~
~~~~~~git cat-file -p commit id 得到 tree id~~~~~~
~~~~~~git cat-file -p tree id 得到 blob id~~~~~~
~over~