文章目录
- Git概念-版本控制器
- Git安装
- Centos平台&ubuntu
- Git基本操作
- 创建Git本地仓库
- 配置Git
- 认识⼯作区、暂存区、版本库
- 添加文件
- 查看.git文件
- 总结
- 添加文件场景2
Git概念-版本控制器
引入
我们在编写各种⽂档时,为了防⽌⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,每个版本有各⾃的内容但最终会只有⼀份报告需要被我们使⽤,在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越
多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?
概念
Git本质是版本控制器,目的是能够更⽅便管理不同版本的⽂件。Git可以控制电脑上所有格式的⽂件,例如?doc、excel、dwg、dgn、rvt等等。而对于开发人员来说,Git最重要的就是可以帮助管理软件开发项目的源代码文件
注意:所有的版本控制系统,只能跟踪⽂本⽂件的改动,而不是文件本身
- 比如:⽐如TXT⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词Linux”,在第8⾏删了⼀个单词“Windows”。
- ⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,到底改了啥,版本控制系统不知道,也没法知道
Git安装
Centos平台&ubuntu
sudo yum -y install git #Centos
sudo apt-get install git -y #ubuntu
查看Git安装的版本:git --version
Git基本操作
创建Git本地仓库
仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来,新建仓库命令是:git init
注意:该命令要在⽂件⽬录下执⾏
可以发现:当前⽬录下多了⼀个.git
目录的隐藏文件。
注意:.git
⽬录是Git来跟踪管理仓库的,不要⼿动修改这个⽬录⾥⾯的⽂件,不然改乱了,就把Git仓库给破坏了。
配置Git
当安装Git后⾸先要做的事情是设置你的⽤⼾名称和e-mail地址,配置用户名称和邮箱地址命令为:
git config[--global] user.name "Your Name"
git config[--global] user.email "email@example.com"
其中:--global
是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置。因为一台服务器下可以创建多个git仓库,如果你希望在不同仓库中使⽤不同的name和email,可以不要--global
选项,需要注意的是,执⾏命令时必须要在仓库⾥
查看配置的命令为:git config -l
删除对应的配置的命令为:
git config[--global] --unset user.name
git config[--global] --unset user.email
认识⼯作区、暂存区、版本库
- ⼯作区:是在电脑上你要写代码或⽂件的⽬录,比如上述的
gitcode
目录就是工作区 - 暂存区:英⽂叫stage或index。⼀般存放在
.git
目录下的index文件当中(.git/index)中,暂存区有时也叫作索引 - 版本库:⼜名仓库,
.git
目录虽然在gitcode目录下,但它不属于工作区,而是git的版本库,这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
⼯作区、暂存区和版本库之间的关系:
- 在创建Git版本库时,Git会为我们⾃动创建⼀个唯⼀的master分⽀,以及指向master的⼀个指针叫HEAD
- 在工作区所做的修改包括:新增,修改,删除内容 。
- objects:对象库。库中存储了git对象, 对象里面存放了工作区中的修改,维护了文件的版本,暂存区存的是git对象的索引。
- commit:将暂存区的这棵树写到master分支下,master里面的这棵树存放的也是git对象的索引,HEAD是一个指针,通过这个指针就能拿到这个master这棵树,就能找到某一个文件具体修改的内容,就可以管控一个文件
- 将工作区的修改添加到暂存区当中,将暂存区的内容提交到本地仓库当中,才能让git追踪管理本地文件。当对⼯作区修改(或新增)的⽂件执⾏
git add
命令时:暂存区⽬录树的⽂件索引会被更新,当执⾏提交操作git commit
时:master分⽀会做相应的更新,可以简单理解为暂存区的⽬录树才会被真正写到版本库中
添加文件
在工作区新建⼀个ReadMe⽂件,可以使⽤ git add 命令可以将⽂件添加到暂存区
- 可以添加一个/多个文件 或者目录到暂存区
git add file1 filee dir ...
- 可以添加当前⽬录下的所有⽂件改动到暂存区
git add .
使⽤ git commit 命令将暂存区内容添加到本地仓库中
- 提交暂存区全部内容到本地仓库中:
git commmit -m "message"
- 提交暂存区的指定⽂件到仓库区:
git commit file1] file2 ... -m "message"
注意:-m
选项跟上描述本次提交的message信息,这部分内容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给⼈看的
甚至可以多次add不同的⽂件,⽽只commit⼀次便可以提交所有⽂件,需要提交的⽂件是通通被add到暂存区中,然后⼀次性commit暂存区的所有修改
可以使用git log
查看历史提交记录
该命令显⽰从**最近到最远的提交⽇志**,并且可以看到我们commit时的⽇志消息,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline
参数
git log --pretty=oneline : 查看一行好看的日志信息
每次提交都有一个commit id(版本号),它是通过哈希加密计算出来的⼀个⾮常⼤的数
查看.git文件
- index就是暂存区,add之后的内容都是添加到这⾥,将工作区的内容放到暂存区
- HEAD是默认指向master分⽀的指针,⽽默认的master分⽀保存的就是当前最新的 commit id
- objects为Git的对象库,⾥⾯包含了创建的各种版本库对象及内容,当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于".git/objects"⽬录下
注意:查找object时要将commit id分成两部分,其前2位是⽂件夹名称,后38位是⽂件名称。找到这个⽂件之后,⼀般不能直接看到⾥⾯是什么,因为该类⽂件是经过sha(安全哈希算法)加密过的⽂件,可以利用:git cat-file -p 版本号
:查看版本库对象的内容
- parent:是上一次提交的commit id
总结
在本地的git仓库中,有⼏个⽂件或者⽬录很特殊
- index:暂存区,
git add
之后,会将工作区的内容放到暂存区 - HEAD:默认指向master分⽀的⼀个指针
- refs/heads/master:⽂件⾥保存当前master分支的最新
commit id(版本号)
- objects:包含了创建的各种版本库对象及内容,可以简单理解为放了git维护的所有修改
添加文件场景2
此时提交之后,是只有⼀个⽂件改变了。原因是:git add 是将⽂件添加到暂存区,git commit 是将暂存区的内容添加到本地仓库中,但是由于并没有使⽤git add file5
,file5目前不不在暂存区中维护,所以我们commit的时候其实只是把已经在暂存区的file4 提交了