常见的命令就那么几个,但是我看的是coderwhy老师的系统课,会把各种细节都讲到。
一般看有没有工作经验,就看会不会应对Git中的各种情况,没有实际在公司的开发经验,一般很难装出来,所以想包装工作经验的兄弟们要好好学啦哈哈哈
其实面试,只要不是头部大厂,一般是叫个技术大哥面试你,你过不过对大哥来说都没有利益损失,所以面试中以能力为主,眼缘也有一定的次要作用。
不过大哥让你通过,你其实能力较差在面试的时候是装的,在试用期内不能干活,最后还得走人,这是坑了自己也坑了大哥,切不可为~
头部大厂就得三面,那么就完全看硬实力了。
邂逅版本控制工具
git的作用
一句话,git版本控制工具,可以记录项目中内容在什么时候什么人,进行了修改删除上传等操作,并进行了项目不同版本代码的备份。
比如,你第一天上传了一个代码,第二天不小心给它删了,你可以通过git调出昨天代码版本的备份。
重要
github可以对比代码差异,让我们一个团队项目,不同人的代码合并。
版本控制的历史
起初没有版本控制软件,改代码前都是把项目手动备份一次,防止改完项目崩了,还能恢复。
后面出现了cvs和svn,它们都是集中式版本控制工具。
git是发布式版本控制工具。
集中式和发布式的区别
集中式版本控制工具
也就是说不同的人,写了不同的代码,都要提交到同一台服务器上面,服务器程序也会记录每次的修改和备份代码等等。
缺点:万一服务器宕机,那么在宕机的时候谁也无法上传新代码,或者访问以前的老代码。
甚至服务器故障坏了,那么以前版本的代码记录都没了。
发布式版本控制工具
发布式版本控制工具,每一次拉取都会对代码仓库进行一次完整备份,也就是说镜像下来所有的这个项目的新老版本(这个镜像肯定不是源代码,会进行压缩什么的,不然会特别大,也就不需要其他服务器来恢复了),所以就算服务器宕机或者坏了,我们可以通过本地的镜像,在其他服务器恢复出以前老版本项目的代码。
Git的使用
官网git-scm.com
Bash-CMD-GUI的区别
**Git-CMD:**和我们Windows的cmd基本上一模一样,只是在上面加了git命令功能
Bash:它是一个shell,也是命令行的一种,libux和macosx都是用这种命令行。它的优点是可以识别执行linux命令,而且相比cmd来说,加了很多新命令和功能,比如ssh连接命令在cmd中是识别不了的。(可以按ctrl+让文字变大)
GUI:图形化界面来运行git命令,我们不需要在小黑篇目里面敲命令了,而是用鼠标点击。
Git的配置类别
tips:getbash命令行退出按Q键,quit的意思。
–system来设置,那么这台电脑系统的所有用户都会用这个git配置,一般不使用。
–global就是当前用户会用这个git配置(电脑是多用户的,我们使用的一般是管理员用户)
也可以给单个仓库设置配置,一般不使用。
1-当我们到公司拿到电脑,可能git里面有其他人的信息,也可能没有信息,我们都是用以上命令来设置自己的user.email和user.name,原先有就会被覆盖。
2-我们可以使用git config –list来查看配置文件,也可以在c盘/用户/用户名/.gitconfog文件查看
为git命令设置别名
Git初始化本地仓库
git是有一个本地仓库和远程仓库的,我们写了代码,git init是创建一个空的git本地仓库,这个时候本地仓库是没有我们的代码的,必须用add和commit 命令把代码文件添加到本地仓库
本地仓库提交到远程服务器仓库,是需要git push命令的。
tips:查看git和node等的安装位置,命令为 where git
问题:我这里vscode没有gitbash控制台,百度看了一下改shell:windows的setting也没用,后面重装git就好了。
当我们是一个新项目,没有本地和远程仓库。
要提交哪个文件夹,就cd到哪里,执行git init(初始化一个新的本地仓库),当前文件夹下就会多出一个.git文件
这个时候只是有一个新本地仓库,我们并没有提交文件上去,所以我们可以通过add和commit等命令提交文件到本地仓库。(注意现在还是本地仓库,不是远程仓库)
公司已经有了项目有了远程仓库
git clone 仓库地址
如果是私有项目的话,一般需要配置key或ssh这些链接授权,克隆的话就不需要自己init创建本地仓库了(因为你克隆下来的项目里面就包含了本地仓库.git文件一样的东西)
文件状态的划分
1-一个文件被执行add命令后,就会被跟踪
2-这时这个文件只是进了暂缓区,也就是不确定要不要提交,只有执行commit后,才会被提交到git本地仓库。
3-如果提交到本地仓库后,我们又修改了这个文件,那么又要被重新add和commit
tips:我们可以通过git log 查看有哪些提交
index就是暂缓区,一般我们是先add让工作区的代码文件进入暂缓区,然后commit提交到本地仓库
其实也可以commit -a直接提交到本地仓库
查看文件的状态git status
它会显示当前目录文件内一些特殊状态文件,如没有被跟踪的文件,或者被跟踪进入暂存区但是没被提交的文件,或者修改modified状态等等。(不会显示已commit的文件,因为没必要)
git add添加文件到暂存区跟踪
git忽略文件
我们经常通过add.也就是说一次添加所有没有被跟踪的文件,那么有的文件总是不需要被跟踪提交,需要被忽略,怎么办呢?
我们可以在当前目录创建一个.gitignore文件,然后在里面写上不需要被跟踪提交的文件名称 (在实际开发中不需要自己创建,比如vue项目,我们肯定会用到vue脚手架,这个脚手架会自动创建.gitignore里面已经写好了需要忽略的文件名称)
tips:github官方发布了一个gitignore的仓库,里面包含了不同项目需要忽略的文件,我们复制过来即可。
文件更新提交到本地仓库-git commit
-m就是message的意思,就是人为写这次提交的相关信息,比如改动了什么优化了什么。
如果嫌每次都要add很麻烦,可以直接git commit -a
git的校验和(了解)
git log
graph就是图表的意思,我们一般在分支开发的时候使用,可以让log结构更清晰。
git log –pretty=oneline就是每一个提交都在一行显示,省略了很多不重要的信息。
tips:还有一个git reflog 会把我们的回退git reset操作也做一个记录,方便我们跳转到最新版本。
版本回退git reset
我们提交了很多次,现在当前版本有点错误,我们想回退到以前的版本查看原先的代码,怎么办呢?
这里的commit id 就是校验和,一般写前七位即可,也可以全部写上。
Git远程仓库和验证
什么是远程仓库
远程仓库不止github,还有gitee和gitlab
其中gitlab没有国外手机号码基本上注册不了
公司也可以通过在自己服务器上安装gitlab这个软件来实现自己服务器有gitlab网站同样的版本控制功能
注册和创建仓库就不多说了,基本上一样的,我自己也会。
远程连接凭证
访问私有仓库,是需要凭证的。
默认情况下,http是无状态的连接,也就是说你第一次输入了账号密码登入后,关了网页再连接又要输入账号密码,它是不知道你以前访问过的。
为什么我们平时网页不会呢,可以直接进去?因为它们都下发了cookie/token这些给客户端,客户端下一次连接就带了token, 通俗来说这个token就等于输入了账号密码。
于是git grediential也提供了一些方式存储密码到内存或者磁盘中,或者用git gredential manager工具(安装git的时候会默认安装),它会记录保存我们的账号密码(我们可以在控制面板-用户-凭证管理里面删除)
tips:
1-那我公共仓库不需要凭证,不是每个人的可以clone和push修改我的仓库?
别人确实可以clone,但是push的话可以push,不过push后,是需要主人也就是你在push request里面同意,才会合并到你的仓库中。
ssh验证
1-我们直接通过github里面的ssh地址访问,是会被拒绝的
2-我们需要在本地git bash中通过ssh-kegen。。。。。来生成一对公钥和私钥
(-t代表加密方式,-C代表注释必须大写C)
3-其中私钥和公钥是一对,它们匹配上才能验证身份,私钥在本地,公钥在c-用户-用户名-.ssh中。我们需要把公钥(id_ed25519.pub文本打开)添加到github的项目拥有者账户中。
4-然后我们再通过ssh地址就可以访问了。
5-只有连接过远程仓库的,可以输入git remote -v 查看这个远程仓库的地址
tips:ssh生成的同一对公钥和私钥,可以为多个平台如gitee和github验证,只需要把公钥给不同平台我们的账户添加即可。
管理远程服务器
我们本地写了代码要提交push上去,是无法直接push的,因为如果原先没有连接的话,根本不知道push给谁
如果你刚开始就clone了这个远程服务器的项目,那么就已经建立连接了,就不需要再git remote add
其中shortname是远程仓库名字,我们可以根据喜欢场景自己设置
url可以是ssh地址也可以是http地址
git fetch等于获取代码,但是不合并,git merge是合并
git pull等于fetch和merge同时执行。
这里我push到gitee是遇到一个问题的,我们需要在gitee中把邮箱公开。