查看更多宝典,请点击《金三银四,你的专属面试宝典》html
git中的文件有如下几种状态:git
未跟踪(untrack):表示文件为新增长的。github
已修改(modified):表示修改了文件,但还没保存到git仓库中。web
已暂存(staged):表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。 面试
已提交(committed):表示文件已保存在git仓库中。正则表达式
按照本地计算机与远程计算机划分,工做区域有如下几种:算法
本地计算机:shell
Working Directory(工做目录):即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内。数据库
Staging Area(暂存区):保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内。缓存
Repository(本地仓库):提交到本地仓库的文件。
远程计算机:
Repository(远程仓库):已提交到远程计算机内的文件。
git clone :将远程仓库clone到本地计算机。
git pull :拉取远程仓库的数据。
git status :展现工做区及暂存区域中不一样状态的文件。
git add :将内容从工做目录添加到暂存区。
git commit :全部经过 git add 暂存的文件提交到本地仓库。
git push :将本地仓库的记录提交到远程仓库。
git reset HEAD <file> :从暂存区移除指定文件。
git checkout -- <file> :从本地仓库恢复指定文件。
git mv:重命名文件
git log:查看提交历史
config 配置有system级别(系统级别), global(用户级别) 和local(当前仓库),三个设置先从system-》global-》local ,底层配置会覆盖顶层配置。
查看系统config
`git config --system --list`
查看当前用户(global)配置
`git config --global --list`
查看当前仓库配置信息
`git config --``local` `--list`
因而可知--global中存储了提交用户的email和用户名,若是须要手动设置则可使用以下指令:
`git config --global user.name ``"myname"``git config --global user.email ``"test@gmail.com"`
Git 和其余版本控制系统的主要差异在于,Git 只关心文件数据的总体是否发生变化,而大多数其余系统则只关心文件内容的具体差别。这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件做了更新,以及都更新了哪些行的什么内容:
Git 并不保存这些先后变化的差别数据。实际上,Git 更像是把变化的文件做快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍全部文件的指纹信息并对文件做一快照,而后保存一个指向此次快照的索引。为提升性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照做一连接。Git 的工做方式就像下图所示:
Git安装以后须要进行一些基本信息设置
a、设置用户名:git config -- global user.name '你再github上注册的用户名';
b、设置用户邮箱:git config -- global user.email '注册时候的邮箱';
注意:该配置会在github主页上显示谁提交了该文件
c、配置ok以后,咱们用以下命令来看看是否配置成功
git config --list
注意:git config --global 参数,有了这个参数表示你这台机器上全部的git仓库都会使用这个配置,固然你也能够对某个仓库指定不一样的用户名和邮箱
7.1 建立git仓库
在要上传的项目文件夹右击选择Git Bash Here->输入$ git init
7.2 向仓库中添加文件
经过$ git add '文件名'添加到暂存区
$ git status查看目前状态
7.3 提交到本地仓库
$ git commit -m '这里写提交说明'
7.4 修改文件与删除文件
直接修改或直接删除
命令:
修改:$ vi '文件名',修改以后执行添加与提交
删除:$ git rm '文件名',删除后直接提交
7.5 Git克隆操做与提交到远程
克隆操做:$ git clone 仓库地址
提交到远程:先添加到暂存区》》提交到本地仓库》》git push提交到远程仓库
若是提交出错,可能由 .git 文件夹中的文件被设为“只读”所致,将 .git 文件夹下的全部文件、文件夹及其子文件的只读属性去掉便可。
注意用户名与密码要与远程仓库一致:
将远程链接地址改成:https://用户名:密码@github.com/用户名/仓库名.git
sha-1散列:SHA (Secure Hash Algorithm,译做(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。正式名称为 SHA 的家族第一个成员发布于 1993年。然而人们给它取了一个非正式的名称 SHA-0 以免与它的后继者混淆。两年以后, SHA-1,第一个 SHA 的后继者发布了。 另外还有四种变体,曾经发布以提高输出的范围和变动一些细微设计: SHA-224, SHA-256, SHA-384 和 SHA-512 (这些有时候也被称作 SHA-2)。
快照:快照技术主要是在操做系统以及存储技术上实现的一种记录某一时间系统状态的技术。近来,Oracle等数据库厂家以及Vmware等虚拟化产品也把这种技术引入各自的数据保护当中。存储中使用快照技术因为其普遍的实用性成为应用最普遍的。
SINA对于快照的定义是:关于指定数据集合的一个彻底可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照能够是其所表示的数据的一个副本,也能够是数据的一个复制品。
为何使用快照?
瞬时备份:在不产生备份窗口的状况下,能够帮助客户建立一致性的磁盘快照,每一个磁盘快照均可以认为是一次对数据的全备份。从而实现常规备份软件没法实现的分钟级别的RPO。
快速恢复:用户能够依据存储管理员的定制,定时自动建立快照,经过磁盘差别回退,快速回滚到指定的时间点上来。经过这种回滚在很短的时间内能够完成。大大的提升了业务系统RTO的水平。
应用测试:用户可使用快照产生的虚拟硬盘的数据对新的应用或者新的操做系统版本进行测试,这样能够避免对生产数据形成损害,也不会影响到目前正在运行的应用。
报表打印等资源消耗较大的业务的分离:用户能够将指定时间点的快照虚拟硬盘分配给一个新的服务器,从而实现将报表打印等对于服务器核心业务会产生较大影响的剥离。使核心业务服务器运行更加平稳有效快速的运行。
下降数据备份对于系统性能的影响: 一般数据备份是在业务服务器上完成的。每次发起数据备份必然对当前业务系统运行性能形成影响。经过快照虚拟硬盘的提取后,备份工做能够转移到其余服务器上。从而实现了零备份窗口(针对应用主机),零影响的理想数据备份。
传输协议:传输协议中各层都为上一层提供业务功能。为了提供这种业务功能,下一层将上一层中的数据并入到本层的数据域中,而后经过加入报头或报尾来实现该层业务功能,该过程叫作数据封装。用户的数据要通过一次次包装,最后转化成能够在网络上传输的信号,发送到网络上。当到达目标计算机后,再执行相反的拆包过程。
HTTPS和HTTP的区别: https协议须要到ca申请证书,通常免费证书不多,须要交费。 http是超文本传输协议,信息是明文传输,https 则是具备安全性的ssl加密传输协议。 http和https使用的是彻底不一样的链接方式用的端口也不同,前者是80,后者是443。 http的链接很简单,是无状态的。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。
SSH传输协议:SSH 为 Secure Shell 的缩写,由 IETF 的网络工做小组(Network Working Group)所制定;SSH 为创建在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登陆会话和其余网络服务提供安全性的协议。利用 SSH 协议能够有效防止远程管理过程当中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其余操做平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎全部UNIX平台-包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其余平台,均可运行SSH。
.gitignore忽略规则的匹配语法 在 .gitignore 文件中,每一行的忽略规则的语法以下: 1)空格不匹配任意文件,可做为分隔符,可用反斜杠转义 2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可使用反斜杠进行转义。 3)可使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。 4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,可是不匹配该文件;"/"开始的模式匹配项目跟目录;若是一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,若是该模式不在 .gitignore 文件中,则相对于项目根目录。 5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"**" 表示匹配任意中间目录,好比a/**/z
能够匹配 a/z, a/b/z 或 a/b/c/z等。 6)以问号"?"通配单个字符,即匹配一个任意字符; 7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。好比[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;若是在方括号中使用短划线分隔两个字符,表示全部在这两个字符范围内的均可以匹配。好比[0-9]表示匹配全部0到9的数字,[a-z]表示匹配任意的小写字母)。 8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式之外的文件或目录,能够在模式前加上惊叹号(!)取反。须要特别注意的是:若是文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起做用的。也就是说"!"开头的模式表示否认,该文件将会再次被包含,若是排除了该文件的父级目录,则使用"!"也不会再次被包含。可使用反斜杠进行转义。
须要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着若是前面的规则匹配的范围更大,则后面的规则将不会生效;
10.1 未使用 git add 缓存代码时:
可使用 git checkout --filepathname (好比: git checkout --readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃全部的文件修改可使用 git checkout . 命令。此命令用来放弃掉全部尚未加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。可是此命令不会删除掉刚新建的文件。由于刚新建的文件还没已有加入到 git 的管理系统中。因此对于git是未知的。本身手动删除就行了。
10.2 已经使用了 git add 缓存了代码:
可使用 git reset HEAD filepathname (好比: git reset HEAD readme.md)来放弃指定文件的缓存,放弃因此的缓存可使用 git reset HEAD . 命令。
此命令用来清除 git 对于文件修改的缓存。至关于撤销 git add 命令所在的工做。在使用本命令后,本地的修改并不会消失,而是回到了10.1所示的状态。继续用10.1中的操做,就能够放弃本地的修改。
10.3 已经用 git commit 提交了代码:
可使用 git reset --hard HEAD^ 来回退到上一次commit的状态。此命令能够用来回退到任意版本:git reset --hard commitid ,你可使用 git log 命令来查看git的提交历史,第一行就是 commitid。
在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来讲不是指向提交,而是指向master,master才是指向提交的,因此,HEAD指向的就是当前分支。
查看分支:git branch
建立分支:git branch <name>
切换分支:git checkout <name>
建立+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
咱们在使用git pull命令的时候,可使用--rebase参数,即git pull --rebase,这里表示把你的本地当前分支里的每一个提交(commit)取消掉,而且把它们临时保存为补丁(patch)(这些补丁放到".git/rebase"目录中),而后把本地当前分支更新为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。
能够经过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,好比要看所克隆的 origin仓库,能够运行:$ git remote show origin
Git中从远程的分支获取最新的版本到本地有这样2个命令:
git fetch:至关因而从远程获取最新版本到本地,不会自动merge
git pull:至关因而从远程获取最新版本并merge到本地
GitLab和GitHub同样属于第三方基于Git开发的做品,免费且开源(https://github.com/gitlabhq/gitlabhq 基于MIT协议),与Github相似,能够注册用户,任意提交你的代码,添加SSHKey等等。不一样的是,GitLab是能够部署到本身的服务器上,数据库等一切信息都掌握在本身手上,适合团队内部协做开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来讲可把GitLab看做我的版的GitHub。
Webhook就是用户经过自定义回调函数的方式来改变Web应用的一种行为,这些回调函数能够由不是该Web应用官方的第三方用户或者开发人员来维护,修改。经过Webhook,你能够自定义一些行为通知到指定的URL去。Webhook的“自定义回调函数”一般是由一些事件触发的,好比推送代码到代码库或者博客下新增一个评论,源站点会为Webhook进行HTTP请求的URI配置。用户经过配置,就可使一个网站上的事件调用在另外一个网站上表现出来,这些事件调用能够是任何事件,但一般应用的是系统集成和消息通知。
Webhook是一个API概念,而且变得愈来愈流行。咱们能用事件描述的事物越多,webhook的做用范围也就越大。Webhook做为一个轻量的事件处理应用,正变得愈来愈有用。
准确的说webhook是一种web回调或者http的push API,是向APP或者其余应用提供实时信息的一种方式。Webhook在数据产生时当即发送数据,也就是你能实时收到数据。这一种不一样于典型的API,须要用了实时性须要足够快的轮询。这不管是对生产仍是对消费者都是高效的,惟一的缺点是初始创建困难。
Webhook有时也被称为反向API,由于他提供了API规则,你须要设计要使用的API。Webhook将向你的应用发起http请求,典型的是post请求,应用程序由请求驱动。