版本管理工具使用之git

git简介

git是分布式版本管理工具,所以git支持离线工作。它有如下特点:
1.分布式版本控制
2.多个开发人员协调工作
3.有效监听谁做的修改
4.本地及远程操作

Git复杂概念多,SVN简单易上手。所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须掌握rebase和merge的区别,fetch和pull的区别等,除此之外,还有cherry-pick,submodule,stash等功能,仅是这些名词听着都很绕。
在易用性这方面,SVN 会好得多,简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

安装Git客户端

一般我们工作的电脑都是Windows系统,要使用git首先要进行安装。从git官网下载后安装即可,下面是下载链接:
1.Mac安装git
http://git-scm.com/download/mac
2.Windows安装git
http://git-scm.com/download/win

安装成功之后,可以在开始菜单里面找到git:
版本管理工具使用之git
或者在桌面右键,也可以看到:
版本管理工具使用之git
其中GUI为用户界面模式,Bash为命令行模式,这里就以Bash为例子介绍git的基本使用方法(其实相比于GUI,个人觉得Bash更容易学习理解)。

Git的使用

1.安装好git之后,由于git是分布式管理工具,可以多个开发人员协调工作,所以我们先要在本地设置用户名name和邮箱email以作为标识,设置账户(需要和github账户设置一致),name和email地址是你在提交commit时的签名。设置方法是桌面右键然后点击Git Bash Here配置名字和邮箱信息,在命令行里输入以下命令:
git config --global user.name xxx
git config --global user.email [email protected]
如下图我是这样设置信息:
版本管理工具使用之git
注意:git config后面使用了参数–global参数,表明你这台机器上所有的Git仓库都会使用这个配置,当然也可以使用git config命令不带–global参数来对某个仓库设置不同的name和email,也就是说你也可以对某个仓库指定不同的用户名和邮箱,根据个人情况设置。
查看配置信息可以用命令git config --list 如果有配置过出现的列表信息里会包含如下所示信息:
user.name=xxx(用户名)
[email protected](邮箱)

2.git的工作原理图解
版本管理工具使用之git

3.git常用命令
git虽然命令多,但常用的有如下这些:
git init 初始化本地git仓库,创建git本地仓库
git add . 将工作区所有文件添加到暂存区
git add < file-name > 将指定文件添加到暂存区
git commit -m ‘备注’ 将暂存区的文件提交到本地仓库,备注必须要有
git status 查看仓库当前的状态,文件是否有被修改过,一般来说会显示需要提交的文件(uncommited)和未追踪的文件(untracked)uncommited:已有的,刚被修改尚未提交的
untracked:原先没有的,新建的

git log 显示从最近到最远的提交日志历史记录
git reflog 查看所以操作记录(包括commit 和reset操作以及已经被删除的commit记录)
git reste -hard HEAD^ 回退到上一个版本(HEAD代码当前版本,HEAD代表上一个版本,HEAD代表上上个版本,HEAD100代表上100个版本)
git reset -hard 回退到指定版本号的版本
git diff 查看工作区域内容和暂存区域内容之间的差异
git diff --cached 比较暂存区和本地仓库之间的差异
git diff HEAD 比较工作区和本地仓库最新版本的区别
git diff 比较工作区和指定版本的之间的差异
git diff 比较两个版本之间的差异
git rm 从版本库删除指定文件
git branch 创建新分支
git checkout 切换到指定分支
git checkout -b 创建并切换分支
git branch 列出所有分支,当前分支前面会标有一个*号
git merge 合并指定分支的内容到当前分支
git merge --no–ff --no-ff 表示禁用fast forward合并,用普通模式进行分支合并,fast forward合并看不出曾经做过合并,普通模式可以。
git branch -d 删除合并后的分支
git branch -D 强制删除分支
git remote 查看远程仓库的信息
git remote -v 查看远程仓库的详细信息
git push origin 推送分支到远程仓库
git pull 拉取远程仓库的代码
git config --global alias.sta status 配置status的别名为sta
git clone [url] 从远程仓库拷贝数据,如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以使用 git clone 拷贝克隆一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

git commit提交规范

代码提交信息的说明,能够使项目在后期协作以及Bug处理时更加容易理解。
【1】commit message格式
版本管理工具使用之git
【2】type 用于说明 commit 的类别,只允许使用下面7个标识。
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style:格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
【3】subject 是commit代码的简短描述,末尾不加标点符号

pre-commit用法说明

项目要使用git进行代码提交时,使用叫pre-commit的git钩子,在调用git commit 命令时自动执行某些脚本检测代码,若检测出错,则阻止commit代码,也就无法push,保证了出错代码只在我们本地,不会把问题提交到远程仓库。

安装husky

npm i husky -save-dev

安装list-staged

npm i lint-staged husky -save-dev

package.json文件

安装好之后,会自动在项目.git目录生成一个hock,这个hock会读取package.json中的内容:

“husky”: {
“hooks”: {
“pre-commit”: “npm run lint-staged”
}
},
“lint-staged”: {
/*.js": “eslint --ext .js”,
"
/*.vue”: “eslint --ext .vue”
}
测试
首先,故意触犯eslint报错:
版本管理工具使用之git
再执行git commit提交代码
版本管理工具使用之git
版本管理工具使用之git
上面代码提交失败说明配置成功生效,每次执行git commit命令,都会自动调用package.json中的precommit命令,在本项目中precommit命令就会执行eslint的代码校验,若校验失败,则无法将代码commit,避免不规范代码提交到远程仓库,特别是在多人协作中能够强制规范代码