什么是版本控制
目标
:了解什么是版本控制 版本控制的特点 目前版本控制系统
- 拥有历史记录 以及 多人协同的版本控制系统
- 历史记录
- 多人协同
- SVN
- GIT
集中式版本控制
目标
:了解什么是集中式版本控制优点: 上手比较简单
- 终端不需要关心 版本库的问题
缺点:中心化的方式,导致一旦服务器出问题,前功尽弃
分布式版本控制
目标
:了解什么是分布式版本控制优点:几乎可以实现任何要求
- 多节点 每个节点都有自己的版本库(本地仓库)
- 多节点 通过远程仓库来进行系统
缺点:因为几乎可以实现任何要求 导致命令太多
Git介绍
目标
:了解Git的前世今生(了解) 知道git是一个分布式的版本控制系统介绍: git从Linux起源, 广泛为开发者提供强大的功能
- 开源社区
- github账号
**
任务
**注册一个github账号
Git的下载和安装
目标-任务
: 下载并安装git路径:
1 下载地址:git下载地址
2 安装
- windows
- macOs
- Linux
3 查看安装成功
- $ 表示要在此位置输入内容
# 查阅版本号 $ git --version git version 2.22.0.windows.1
Git的使用方式和GitBash介绍
目标
: 了解git的使用方式 了解gitBash和windows命令行的区别,
- gitBash可以运行linux命令 windows不行 但是powershell支持部分windows
- 图形化方式 和 命令行方式 推荐命令行
任务
: 使用gitBash 进行一些简单操作 切换目录 查看目录
路径
:
- 通过开始菜单 或者右键 调出gitBash窗口
- 尝试输入一些命令
例如
# 回到上一级 $ cd .. # 输出当前目录 $ pwd # 清空屏幕 $ clear
注意 $ 的意思是 这里需要用户输入 ,不包括在要输入的命令里面
常用命令补充-基本命令-切换目录/输出目录/查看目录文件
目标
: 切换目录/输出目录/查看目录文件 命令.# 切换目录 $ cd 目录名 # 切换到上一级 $ cd .. # 输出当前目录 $ pwd # 查看 目录文件列表 $ ls # 查看目录文件列表 包括隐藏文件 $ ls -a
任务
:
- 切换到目录 test下,
- 打印目录路径,
- 并查看目录文件列表
路径
# 切换到一个目录下 $ cd test # 输出目录路径 $ pwd # 查看目录下文件 $ ls # 查看目录下隐藏文件 $ ls -a
常用命令补充-基本命令-新建目录/删除目录/新建文件/删除文件
目标
: 新建目录/删除目录/新建文件/删除文件 命令# 新建目录 $ mkdir 目录1 目录2 .. # 删除目录只能删除当前文件夹 $ rmdir 目录1 目录1 # 删除目录 $ rm -rf 目录名1 目录名1 .. # 新建文件 $ touch 文件名1 文件名2 .. # 删除文件 $ rm 文件1 文件2 ..
任务
:
- 新建一个目录A,在目录A下新建两个目录B和C,
- 查看当前目录确保B和C存在, 然后删除目录C,
- 在B目录下 新建文件 1.txt 和 2.txt , 查看文件目录 确定 1.txt和2.txt存在
- .删除2.txt 并查看目录 确保 2.txt已经删除
路径
:# 新建目录A $ mkdir A # 切换到目录A下 $ cd A # 新建B 和 C 目录 $ mkdir B C # 查看目录 ls # 删除 C $ rm -rf C # 打开B目录 $ cd B # 新建1.txt 2.txt $ touch 1.txt 2.txt # 查看目录 $ ls # 删除 2.txt $ rm 2.txt # 查看目录 $ ls
通过以上练习 可掌握基本文件新建 删除
常用命令补充-查看文件内容-编辑文件
目标
: 掌握查看文件内容和编辑文件命令# 查看文件内容 $ cat 文件名 # 查看文件内容 需要按q退出 $ less 文件名 $ vi 文件名 # 进入插入编辑模式 $ i # esc退出插入编辑模式 # 退出编辑模式 但是不保存 $ :q # 保存并退出编辑模式 $ :wq # 强制退出但不保存编辑模式 $ :q!
任务
:
新建一个文件1.js, 写入 hello world 保存退出, 用两种方式查看文件.
再次写入 hello world2 但不保存 退出, 查看文件内容
路径
# 新建一个文件 $ touch 1.js # 编辑 1.js $ vi 1.js # 进入编辑模式 $ i # 写入hello world # esc 退出编辑模式 # 保存退出 $ :wq # 查看文件1 $ cat 1.js # 查看文件2 $ less 1.js # 退出查看文件模式 $ q # 进入编辑模式 $ vi 1.js # 进入编辑模式 $ i # esc退出编辑模式 # 写入hello world2 # 强制退出 不保存 $ :q! # 查看文件 $ cat 1.js
通过以上练习 可基本掌握 纯命令式的编辑文件
git-基础-初始化配置
目标
: 了解git的初始化内容 初始化用户名 邮箱
- 第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
如果用了
--global
选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉--global
选项重新配置即可,新的设定保存在当前项目的.git/config
文件里。# 初始化 用户名 用户名可以随意取 但是最好是自己的标识项 必填 --global会将内容存在用户配置下 $ git config --global user.name '用户名' # 初始化 邮箱 邮箱是用来发送邮件的用的 必填 $ git config --global user.email '邮箱' # 查看git配置 $ git config -l
任务
: 完成git环境的用户名和邮箱的初始化
路径
:# 初始化用户名 $ git config --global user.name '用户名' # 初始化邮箱 $ git config --global user.email '邮箱'
注意:邮箱 和 用户名 是在git中的身份, 可以识别是谁提交的代码,并及时通知
git-基础-三个核心区域
目标
: 了解掌握git的三个核心区域的含义**
任务
😗*能够理解 工作区 <=> 暂存区 <=> 仓库区 的工作流程
- 工作区 :工作区 就是工作开发的地方,我们在编辑的,开发的,直接面对的目录区域 就是工作区
- 暂存区 : 暂存区 是由文件工作区 到 仓库区 中间过程的 一个 中间存储节点. 它只是存储了工作区的变动. 可以理解为一个临时备份.
- 仓库区: 是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
- 新增文件 删除文件 编辑的文件都要经过暂存区
- 暂存区就是工作区文件改变的一个文件快照
var a = 1 //初始化文件 var a = 2 //工作区修改 //提交到暂存区 var a = 2 //工作区修改 var a = 3 // 提交到仓库区 // 提交暂存区到仓库区
git-基础-基本操作
目标
: 掌握git基础的操作
- 初始化仓库
# 在文件目录下 $ git init # 新建目录 并在该目录下 初始化仓库 $ git init <目录名>
- 查看仓库状态
# 在文件目录下 $ git status
仓库状态 主要会提示 工作区新增,修改,删除的文件 以及暂存区的所有文件快照
- 查看日志
$ git logitg
- 提交无追踪文件到 暂存区
# 提交工作区某个文件到暂存区 $ git add 文件名 # 提交工作区新增-修改-删除 到暂存区 $ git add .
- 提交暂存区文件到仓库区
# 提交所有暂存区文件到仓库区 $ git commit -m "日志描述" # 提交暂存区 某些文件到仓库区 $ git commit <文件1> <文件2> -m "日志描述"
- 恢复暂存区文件到 工作区
# 从暂存区恢复某个文件到工作区 $ git checkout -- <文件名> # 恢复暂存区的所有文件到工作区 $ git checkout .
任务
:
- 初始化一个本地化仓库, 查看当前仓库状态,
- 新增一个文件 index.html, 提交到暂存区, 再提交到仓库区
- 在 index.html 中写入 hello world, 再提交到 暂存区,
- 从暂存区 恢复到 工作区.
路径
:# 初始化一个仓库 $ git init gitDemo # 切换到仓库目录 $ cd gitDemo # 新建并编辑index.html文件 $ touch index.html # 提交到暂存区 $ git add index.html # 提交到仓库区 $ git commit -m "新增index.html" # 进入编辑模式 $ i # 写入hello world # esc 退出编辑 # 退出保存 $ :wq # 提交到暂存区 $ git add index.html # 暂存区恢复到工作区(大家一定注意 -- 与index.html 之间是有空格的) $ git checkout -- index.html
git-基础-的文件状态
目标
: 理解 git 中的几种文件状态
- 未追踪:表示还没有被 Git 管理过,既没有进入过暂存区,更没有进入过仓库区
- 已修改:表示修改了文件,但还没保存到历史记录中。
- 已提交: 数据已经安全的保存在本地数据库中
- 已暂存: 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
任务
:
- 完成未追踪文件a.js,
- 已修改文件b.js ,
- 已暂存文件c.js, touch
- 已提交文件d.js等四种文件状态
路径
:# 初始化一个仓库 $ git init fileDemo # 切换到该目录下 $ cd fileDemo # 新建一个a.js b.js c.js d.js $ touch a.js b.js c.js d.js # 提交b.js c.js d.js 到暂存区 $ git add b.js c.js d.js # 提交b.js d.js 到 仓库区 $ git commit b.js d.js -m "提交b.js和d.js" # 编辑修改b.js内容 保存 # 此时状态 a.js(未追踪) b.js(已修改) c.js(已暂存) d.js(已提交)
git-基础-删除文件
目标
: 学会删除工作区文件 以及 放入到暂存区# 删除工作区文件,并且将这次删除放入暂存区 $ git rm [file1] [file2] ... $ rm file $ git add file # 停止追踪指定文件,但该文件会保留在工作区 $ git rm --cached [file] # 改名文件,并且将这个改名放入暂存区 $ git mv [file-original] [file-renamed]
任务
:
- 将a.js在工作区删除,并放入后暂存区,
- 将已提交过的b.js 停止追踪,
- 将c.js文件改名d.js 放入暂存区
路径
# 初始化一个仓库 $ git init Demo # 新建a.js b.js c.js $ touch a.js b.js c.js # 提交a b c到暂存区 $ git add . # 提交暂存区到仓库 $ git commit -m "提交" # 删除a.js并放入暂存区 $ git rm a.js # 停止追踪b.js $ git rm --cached b.js # 重命名c.js 到 d.js $ git mv c.js d.js
git-基础-忽略文件.gitignore
目标
: 知道什么是忽略文件, 并在git中应用
- 忽略文件是用来存放git工作区中 被默认不追踪的文件信息
- 例如 npm依赖目录 node_modules
任务
:新建一个忽略文件,在git中忽略掉所有的js文件 和 node_modules
路径
- 初始化仓库
- 新建.gitignore
- 写入以下配置信息
*.js node_modules
git-基础-撤销和回退
目标
: 掌握 如何 仓库区 => 暂存区,工作区, 暂存区 => 工作区的回退机制# 恢复暂存区的指定文件到工作区 $ git checkout -- [file] # 恢复某个commit的指定文件到暂存区和工作区 $ git checkout [commitid] [file] # 提交到暂存区 和 仓库区 合并成一步 $ git commit -a -m "日志" === git add . git commit -m "日志" # 恢复暂存区的所有文件到工作区 $ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 $ git reset --hard # 重置暂存区与工作区回到仓库的前两个版本 ^^个数决定回退版本个数 $ git reset --hard HEAD^^ # 所有的提交命令 查看 $ git reflog # 回退版本 $ git reset --hard <版本号>
任务
:
- 新建a.js,内容为1, 提交到仓库,将内容变更为2,
- 再提交vi 到仓库,内容变为3,提交仓库,
- 内容变为4, 提交到暂存区,
- 内容变为5, 然后暂存区内容回退到工作区,
- 然后回退到内容为2 的版本
路径
:# 初始化仓库 $ git init demo # 切换目录 $ cd demo # 新建编辑a.js $ vi 1.js # 保存退出 $ :wq # 提交到暂存区 $ git add . # 提交到仓库 $ git commit -m "提交第一次" # 编辑改为2 # 提交到仓库 $ git commit -m "提交第二次" # 编辑改为3 # 提交到仓库 $ git commit -a -m "提交第二次" # 编辑改为4 # 提交到暂存区 $ git add a.js # 内容变为5 # 暂存区内容回工作区 $ git checkout -- a.js # 回到版本为2的版本 $ git reset --hard HEAD^
git-基础-总结
总结:
- 版本控制 历史记录 多人协同
- 集中式版本控制 SVN
- 分布式版本控制 GIT
- GIT安装
- 常规指令 新建文件夹 /删除文件 /切换目录 /查看文件/新建文件/编辑文件
- 初始化配置 用户名 邮箱
- 工作区 <=> 暂存区 <=> 仓库区
- 工作区 =>暂存区 git add <文件名> git add . 暂存区 => 仓库区 git commit -m “”
- 未追踪- 已暂存状态-已修改状态-已提交状态
- 删除文件在git中 git rm 文件名
- 忽略文件 忽略掉不需要提交的文件或文件夹
- 撤销回退 后悔药