git基本概念学习
测试工作中用git的机会还是很大的,大部分情况下,就是维护公司的自动化脚本,或者其他代码。所以我们这节课简单讲一下,内容略长,不过都比较简单,只是几个命令。git简介git是一个分布式的版本控制系统,主要是管理代码的。git的版本和工作区暂...
测试工作中用git的机会还是很大的,大部分情况下,就是维护公司的自动化脚本,或者其他代码。所以我们这节课简单讲一下,内容略长,不过都比较简单,只是几个命令。
git简介
git是一个分布式的版本控制系统,主要是管理代码的。
git的版本和工作区暂存区区别
工作区(Working Directory)
就是你在电脑里能看到的目录,文件夹就是一个工作区
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
git的仓库
存放代码的地方,比如全世界都在用的同性交友网站,github
分支管理
也就是不同的平行世界的意思,A在一个分支A1进行开发的a,不会影响B在B1分支上的开发的内容b。甚至你自己本地也可以同时创建多个不同的分支,代码分开进行管理。
---------------------------
下面实战一下,模拟一个正常的场景,你刚入职一家公司,这家公司已经在gitlab上有UI自动化脚本了,现在需要你在本地拉取代码,编写自己负责模块的UI自动化脚本,再提交到gitlab上去。
首先你先需要获取到你们公司的UI自动化脚本仓库的地址。
我们这里在github上创建了一个临时仓库地址,然后用他模拟测试。
git@github.com:db521/wxgit.git
我们再接下来,就需要进行认证了,这样服务器端,就可以让我们下载代码以及上传代码了。
我们这里使用ssh的方式进行上传下载,具体https和ssh的方式那种更好,ssh不需要每次提交代码输入账号和密码,你觉得呢。所以推荐ssh。安全点,至少不需要天天输入账号密码。
那么需要使用ssh-keygen 这个小工具创建我们的公钥/私钥对(具体这个东西的作用和概念后面会详细再说),然后把生成的公钥发给你们公司的管理gitlab的同学,让他给他添加到受信任的列表中。(当然如果你要打算练习的话,使用https的方式会方便一点,因为只需要输入用户名密码就可以clone我仓库的代码了。但是ssh的方式,需要你把公钥发到我的github受信任列表中才行)
下面说具体的命令(windows为例):
ssh-keygen -t rsa -C"youremail@example.com"
各位记得把邮箱账号换成自己的,这个地方有一万个人使用的就是这个邮箱地址,真有意思。
然后一路回车就会生成一个公钥和私钥,这个文件就在你的命令行提示里面有,大概的路径在下面截图所示的位置,各位可以看下自己生成时的效果。
当你们公司管理gitlab的同学说已经把你的公钥添加到服务器后,你就可以执行下一步操作了,也就是克隆代码了。
命令很简单:
git clone git@github.com:db521/wxgit.git
理论上,效果会如下展示:
各位记得在拉代码的时候,鼠标右键,如果git bash here的时候,本身不是管理员权限启动,就会导致拉取代码报错,因为没有权限创建文件。另外在拉取代码时,一定要记得找一个文件夹,不要随便找个地方,比如上图的例子,就是在桌面上直接拉代码了。
这样我们看到服务器上拉下来的代码就是这样的。
我们下面就开始准备写代码了。我这里随便写点内容,放在一个新的文件中。
我们写完,然后肯定在上传代码之前,要确认本次的文件修改范围,是不是我们要的内容。我们先查看一下。
git status
解释一下上图,上面的图也是很多新手同学经常遇到的问题,为啥我刚clone完代码,再查看git status还报错呢,这个地方的提示就是当前不是git仓库地址。我们可以看到我后面执行了cd 命令,跳转到wxgit这个文件夹下面,而且我们的文件夹路径最右面有了一个叫(master)的东西。这个表示当前目录是git所在的仓库地址,而且当前分支是master分支。
再往下执行git status的时候,显示了一堆信息:
一行一行的解释一下:
当前分支在master上
你的分支跟远程master分支已经保持最新
没有跟踪的文件是XXX(使用git add命令添加如下的文件)
\345\243这个文件文件名是中文的,只不过显示的是八进制的字符编码,如果需要的话,大家可以搜一下:git status显示中文解决一下,也可以不用管,因为不影响提交代码.当前实际上啥也没有提交,只不过有待跟踪的文件而已(可以使用git add命令跟踪)。
上面这些话的意思是啥呢,简单来看,就是你的分支是master分支,但是你刚才创建的文件,git还没有进行版本管理,你这个时候对文件做的任何改动,git都不会进行记录,也就是没有版本的概念,这个文件也就是在git的概念中的工作区中。如果你想使用git进行管理这个文件,那么就使用git add添加到暂存区里面,这样的话,再做任何改动,git都会做记录,你想做回退也可以了。
提交我们的修改
因为我们的出发点就是添加代码文件,然后提交到gitlab仓库,所以我们直接添加一下。
git add XX文件名,或者git add .
中文的情况下,我们可以使用git add . 来解决我们的尴尬。
都可以添加文件,但是使用 . 的意思是把当前所在文件夹下面的所有文件都添加到git仓库,所以各位用这个参数时,慎重,不要误添加一些没用的编译后的代码文件,或者其他写的临时文件到git仓库,再想办法弄出来。
我们继续下一步就是把文件真正的放到我们的分支里面。
也就是如下命令:
git commit -m "你本次提交的代码简单说明"
解释一下这个命令的操作效果,第一行显示你当前所在的分支是master,后面的2bf08d3之类的东西,就是你本次提交的指针地址(不了解指针的,可以理解为你对文件的修改的一个代号,这样你想恢复到这个版本的,就可以用这个代号了)。
下面提示一个文件修改,一次插入内容。创建文件(详细的参数可以参考:https://zhidao.baidu.com/question/1610004660034245387.html)
也就是说这个文件已经放到你本地的master分支里面了。
下面也是最重要的时刻了,我们要把自己代码提交到gitlab服务器
命令如下:
git push origin master
不过呢,这里一定要郑重提醒大家,先pull再push!!!先pull再push!!!先pull再push!!!
这么做的目的呢,也就是防止在你提交代码之前呢,有其他同学先于你提交了代码,你再提交时,服务器认为你的代码跟其他同学有冲突,会让你先拉代码到本地,再解决冲突后,再次提交到服务器。
我这边遇到过部分同学,就是直接push,然后提交不上去,报错也不管,直接加-f参数强制提交代码,然后把别人的代码给删除掉了。真是损人利己。这是大忌了。各位一定要记住。
解释一下:
上面执行pull的时候,他去对应的仓库地址拉了一下代码,也就是我们的master分支,最后提示我们已经是最新了。
再往下执行的是push命令,也就是推送到远程服务器,这个时候的内容比较多,其实我们只需要关注最后2行即可,也就是推送到的仓库地址,以及本地的master分支代码提交到远程的master分支了。
到这来可能已经算完事了,但是也可能会需要让你创建新的分支,跟其他同学不要共用一个分支,这种情况下也很常见,也就是你自己写自己的代码,不干扰其他同学。
命令如下:
git branch XXX分支名
然后分支创建后,切换到对应的分支
git checkout XXX
解释一下,第一个创建分支时,还是在master分支上,需要切换到对应的分支,也就是上图标注的zdl分支。
这个新的分支怎么提交代码呢,一样的流程,创建代码文件,add commit 之后,再pull代码,再push到远程仓库地址。有点特别的是,第一次服务器会没有对应的远程分支名字,会同步创建一个同名的分支名字,那么你以后就可以一直使用这个分支提交代码了,如果想要把你分支的代码合并到master分支,可以在你登陆你们公司的gitlab仓库后,发起merge请求,让管理gitlab的同学审核你的代码后,通过审核,就可以合并到master分支了。
如下为效果就不解释了:
最后做一下总结:
git很牛逼;
git拉代码最好使用ssh方式,安全;
git提交代码之前必须先pull再push;
git命令五板斧:git status/add/commit/push/pull;
git略微频次低一点的命令:git clone/branch/checkout;
完,到此,git就够用了,再多 就要去柠檬班软件测试学习网站找了。