目录
1.创建Git本地仓库
❓用git维护的文本文件和二进制文件,是可以存在服务器的任意位置吗?
当然不可以,这样git就不能进行追踪和管理了。
如果我们想要把git管理和追踪这些文件,我们必须把这些文件放到git仓库里面。
只有放到git仓库的文本文件和二进制文件才能被git管理和追踪。
1.1创建仓库
❗要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。
mkdir gitcode
1.2创建和初始化Git本地仓库
git init
1.3查看隐藏目录.git
我们发现,当前⽬录下多了⼀个 .git 的隐藏⽂件, .git ⽬录是 Git 来跟踪管理仓库的,不要⼿动
修改这个⽬录⾥⾯的⽂件,不然改乱了,就把 Git 仓库给破坏了。
ll -a
tree .git
2.配置本地仓库
name 名称 和 email 地址 必须要配置。如果不配置,将来我们对本地仓库进行操作的时候,出现一系列的问题(报错)所以创建完本地仓库,马上配置它们。
使用 git config 命令就可以为我们本地仓库设置一些配置项了。
2.1新增配置
[root@tangsiqi gitcode]# git config user.name "tsq"
[root@tangsiqi gitcode]# git config user.email "2784139418@qq.com"
【注:前面的配置项是我们在创建本地仓库默认为我们自动配置的配置项】
2.2删除重置配置
[root@tangsiqi gitcode]# git config --unset user.name
[root@tangsiqi gitcode]# git config --unset user.email
2.3查看配置选项
git config -l
2.4全局范围的新增和删除配置
一台服务器上不止可以创建一个本地仓库,一台服务器上可以创建多个本地仓库。
git config --global 加上--global表示我们配置的配置项是会在当前机器所有的git本地仓库都生效的。
[root@tangsiqi gitcode]# git config --global user.name "tsq"
[root@tangsiqi gitcode]# git config --global user.email "2784139418@qq.com"
[root@tangsiqi gitcode]# git config --global --unset user.email
[root@tangsiqi gitcode]# git config --global --unset user.name
3.工作区、暂存区、版本库、对象库
- Git是一个版本控制系统。
- 使用Git可以对我们电脑上所有格式的文件进行跟踪和管理。
- 前提将被管理的文件放到git仓库里面维护。
现在我们尝试在gitcode下新建一个ReadMe文件,让Git来管理管理!
- 目前这种情况下ReadMe文件在gitcode目录下能否被管理❓当然不可以。
- Readme所在的gitcode不是本地仓库,真正的git仓库是隐藏的.git 才能被我们称为git仓库。又称版本库。Git版本控制系统,所有.git也叫版本库。
- 那么我们ReadMe放到版本库.git下能被管路吗❓不可以且不被允许。
不允许在.git中进行任何手动修改。一旦修改,可能导致整个本地仓库不能使用报废了。
综上所述,只能将被管理的文件放到gitcode工作目录下。和.git同级目录下。所以git就把像gitcode这样的目录称为工作区。
⼯作区:是在电脑上你要写代码或⽂件的⽬录。
暂存区:英⽂叫 stage 或 index。⼀般存放在 .git ⽬录下的 index ⽂件(.git/index)中,我们
把暂存区有时也叫作索引(index)。
版本库:⼜名仓库,英⽂名 repository 。⼯作区有⼀个隐藏⽬录 .git ,它不算⼯作区,⽽是Git 的版本库。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
下⾯这个图展⽰了⼯作区、暂存区和版本库之间的关系:
图中左侧为⼯作区,右侧为版本库。Git 的版本库⾥存了很多东西,其中最重要的就是暂存区。
在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫 HEAD。(分⽀和HEAD的概念后⾯再说)
当对⼯作区修改(或新增)⽂件执⾏ git add 命令时,暂存区⽬录树⽂件索引会被更新。
当执⾏提交操作 git commit 时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中。
工作区:Readme所在的gitcode目录就是git的工作区。注意❗.git虽然在工作目录下,但是不属于工作
版本库:.git文件
stage/index 暂存区/索引
head指针 指向了master分支(暂时不讲,后面会讲解)
综上所述:由上述描述我们便能得知:通过新建或粘贴进ReadMe⽬录(工作区)的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤ git add 和 git commit 命令才能将⽂件添加到仓库中进⾏管理!!!
4.add操作和commit操作
4.1add操作
此步操作:将工作区中所有文件的修改内容 添加进版本库的暂存区中。
- ❗❗三部分内容:工作区新增文件+修改已经存在的文件(增删改)+删除文件操作
- 暂存区存放的是修改对象的索引(轻量级)
- Add的时候,会在版本库的对象区新增一个git对象。
- 注意:虽然.git的暂存区已经有工作区文件的修改内容了,但是不算将真正内容写入版本库。
4.2commit操作
此步操作就是将 暂存区的内容 提交到master分支下。此步完成之后,才能真正意义上说将修改的内容放到版本库中。
- commit是将暂存区的树状结构 写到 master分支下,master分支下也是一个一个的树状结构(目录树),也是一个个对象的索引。(轻量级)。
- 只要能拿到head,head是一个指针。就能拿到master这棵目录树。就可以拿到文件具体修改的内容。就可以管控文件了。
- 完成以上两步,才能真正意义上来说用git来管理我们git仓库中的文件Readme文件。
4.3对象库
版本库中还存在一个模块,被版本库维护着——对象库
- 对象库:objects(里面存储着的git对象)
- 在Add操作的时候,暂存区在新增工作区的修改内容的同时,也会创建和将修改内容写入git对象。
- Git对象会被维护到git版本库中的对象库objects中。Git对象存储的是Add一次的修改工作区文件的内容。
- 维护文件所有的版本 == 维护git版本库中对象库中所有的git对象中的内容(内容是工作区的Add的修改内容)
暂存区存放的是修改对象的索引(轻量级)
master分支下也存放是对象的索引。
修改的工作区的内容会写入对象库的一个新的git对象中。