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 的时代了。
SSH key
步骤1. 首先需要检查你电脑是否已经有 SSH key
cd ~/.ssh
ls
.ssh表示ssh文件是个隐藏文件
查看是否存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么可以跳过步骤2,直接进入步骤3。
步骤2. 创建一个 SSH key
ssh-keygen -t rsa -C "your_email@example.com"
-t 指定密钥类型,默认是 rsa ,可以省略。
-C 设置注释文字,比如邮箱。
-f 指定密钥文件存储文件名。
以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key :
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。
接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),
当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
接下来,就会显示如下提示信息:
Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
当你看到上面这段代码的时候,那就说明SSH key 已经创建成功,你只需要添加到github的SSH key上就可以了。
步骤3.添加你的 SSH key 到 github上面去
a、首先你需要拷贝 id_rsa.pub 文件的内容,使用用编辑器打开文件,复制内容,(注意仅复制文本,不能多空格或者回车):
gedit ~/.ssh/id_rsa.pub
b、登录你的github账号,从右上角的设置Settings 进入,然后点击Personal setting 中的SSH and GPG keys,点击New SSH key,把复制的 SSH key 代码粘贴到对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。输入别名,默认使用邮箱。
步骤4.测试一下该SSH key
在git Bash 中输入以下代码:
ssh -T git@github.com
当你输入以上代码时,会有一段警告代码,如:
The authenticity of host ‘github.com (207.97.227.239)’ can’t be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
这是正常的,你输入 yes 回车既可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:
Enter passphrase for key ‘/c/Users/Administrator/.ssh/id_rsa’:
当然如果你密码输错了,会再要求你输入,知道对了为止。
注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。
密码正确后你会看到下面这段话:
Hi #######! You’ve successfully authenticated, but GitHub does notprovide shell access.
这时表示配置成功,这时就可以在本地通过SSH的方式去clone或fetch等了。
SSH与HTTP区别
1.clone项目:使用ssh方式时,首先你必须是该项目的管理者或拥有者,并且需要配置个人的ssh key。而对于使用https方式来讲,就没有这些要求。
2.push:在使用ssh方式时,是不需要验证用户名和密码,如果你在配置ssh key时设置了密码,则仅需要验证配对密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。
安装Git客户端
一般我们工作的电脑都是Windows系统,要使用git首先要进行安装。从git官网下载后安装即可,下面是下载链接:
1.Mac安装git
http://git-scm.com/download/mac
2.Windows安装git
http://git-scm.com/download/win
安装成功之后,可以在开始菜单里面找到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 xxx@foxmail.com
如下图我是这样设置信息:
注意:git config后面使用了参数–global参数,表明你这台机器上所有的Git仓库都会使用这个配置,当然也可以使用git config命令不带–global参数来对某个仓库设置不同的name和email,也就是说你也可以对某个仓库指定不同的用户名和邮箱,根据个人情况设置。
查看配置信息可以用命令git config --list 如果有配置过出现的列表信息里会包含如下所示信息:
user.name=xxx(用户名)
user.email=xxx@foxmail.com(邮箱)
2.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 < commit id> 回退到指定版本号的版本
git diff 查看工作区域内容和暂存区域内容之间的差异
git diff --cached 比较暂存区和本地仓库之间的差异
git diff HEAD 比较工作区和本地仓库最新版本的区别
git diff < commit id> 比较工作区和指定版本的之间的差异
git diff < commit id> < commit id> 比较两个版本之间的差异
git rm -r --cached < file-name> 删除远程仓库里制定的文件
git rm < file-name> 从版本库删除指定文件
git branch < branch-name> 创建新分支
git checkout < branch-name> 切换到指定分支
git checkout -b < branch-name> 创建并切换分支
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git merge < branch-name> 合并指定分支的内容到当前分支
git merge --no–ff < branch-name> --no-ff 表示禁用fast forward合并,用普通模式进行分支合并,fast forward合并看不出曾经做过合并,普通模式可以。
git branch -d < branch-name> 删除合并后的本地分支
git branch -D < branch-name> 强制删除本地分支
git push origin --delete < branch-name> 删除远程分支
git remote 查看远程仓库的信息
git remote -v 查看远程仓库的详细信息
git remote add origin git@github.com:xxxxxxx.git 将本地仓库与远程仓库关联起来
git push -u origin master 新建远程仓库并第一次推送 master 分支时,加上 -u 参数,以后有内容了就不用加参数u
git push origin < branch-name> 推送分支到远程仓库的指定分支上
git pull 拉取远程仓库的代码
git config --global alias.sta status 配置status的别名为sta
git clone [url] 从远程仓库拷贝数据,如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以使用 git clone 拷贝克隆一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
git commit提交规范
代码提交信息的说明,能够使项目在后期协作以及Bug处理时更加容易理解。
【1】commit message格式
【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 commit提交代码
上面代码提交失败说明配置成功生效,每次执行git commit命令,都会自动调用package.json中的precommit命令,在本项目中precommit命令就会执行eslint的代码校验,若校验失败,则无法将代码commit,避免不规范代码提交到远程仓库,特别是在多人协作中能够强制规范代码
git clone 失败的原因
有时候我们刚刚进入一家公司,从远程仓库克隆一个项目到本地,可能会遇到克隆失败的情况。
remote: The project you were looking for could not be found.
fatal:repository …… not found
这种情况有可能是公司之前的前端遗留的凭据你没有改过来,我们可以尝试打开控制面板修改普通凭据。比如我们在git配置的时候,使用的username是xiaoming 那么我们可以把用户名改为xiaoming.