软件测试 | Github 必会高频基础命令与 IDE 的 Git 集成
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
GitHub 上我们可以 fork 别人的项目,为了与别人产生一种协作关系,将他人的项目在自己本地创建也一个,这里以霍格沃兹测试学院(Hogwarts)的演练环境做演示:
1.Fork
1.1) 点击 fork 按钮对项目进行 fork:
![](https://static001.geekbang.org/infoq/0f/0f1531d65fc3ef3802e972d1e582afd3.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
1.2)fork 完成后就可以在我们自己的 GitHub 账户下见到被 fork 的项目:
![](https://static001.geekbang.org/infoq/ff/fff9bae68d75618835e7f59cb13366f3.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
2.Clone
2.1)接着我们使用 git clone 命令将 fork 的项目 clone 到本地:
![](https://static001.geekbang.org/infoq/6f/6f4786eea035b9ad3164a3cab6243ec2.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
![](https://static001.geekbang.org/infoq/f3/f379b78d5de3c16d340cfe809270d19e.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这个时候可以将此项目看做是自己的一个项目,可以任意修改;
2.2)项目的作者可以看到有哪些人 fork 了自己的项目:
![](https://static001.geekbang.org/infoq/f3/f38117dc4875ed5dab5255c964bae4d4.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
3.Push
3.1) 先在本地修改 README.md 文件为:
霍格沃兹测试学院定向班第二期演练 try it3.2)将文件提交到本地仓库:
![](https://static001.geekbang.org/infoq/50/505138d9ef76e71c2bb27ecc452663e7.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这个时候可以看到提交的作者已经变成我们自己了;也可以使用 git remote -v 命令来查看,可见现在本地仓库与远程仓库直接关联的是 fork 之后的项目:
![](https://static001.geekbang.org/infoq/ae/ae97cbe437052460f3f1355a0a57a080.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
3.3)只用 git push 命令将本地仓库的文件推到远程仓库中去:
![](https://static001.geekbang.org/infoq/ef/ef1c2da7cd34d3b72a1df258219b0bc8.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
如下图可以看到已经成功将修改后的 README.md 文件推到了 GitHub 上:
![](https://static001.geekbang.org/infoq/af/af2b7a070f6a6c94aee903e410d3d819.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
4.PR(pull request)
pr:全称 pull request,当我们修改了 fork 后的项目后,因为不能直接修改别人的项目,这个时候想要将自己的修改与原项目合并,就可以使用 pr 来向原项目作者进行申请
4.1)发起 pr,点击 New pull request
:
![](https://static001.geekbang.org/infoq/64/64474fe37b2664a0b9808480a7975f4b.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
然后我们可以看到仓库路径从我的仓库向原作者项目仓库地址发起 pr 请求,在下面可以看到我对项目的修改 diff:
![](https://static001.geekbang.org/infoq/0f/0fd0299862f6929dd9c0d15dc819700a.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
4.2)这个时候我们点击Create new pull request
按钮,填写描述后再点击Create new pull request
按钮:
![](https://static001.geekbang.org/infoq/09/092255aedff1d763be9c1109974a13c4.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
![](https://static001.geekbang.org/infoq/94/94d7127e2b40c3e6dd114d6e3d72023a.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
5.merge PR
这个时候原仓库维护人员就可以收到 pr,并对其进行审核、评论、merge 或 close 的操作:
![](https://static001.geekbang.org/infoq/f5/f5293c92e60fe733ddcd62d750c9be82.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
5.1) 在文件修改没有冲突(conflict)的时候,可以直接 merge:
![](https://static001.geekbang.org/infoq/0b/0bc2a014eab2ffa6f6a6733c092e6acc.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
5.2) 当文件修改有冲突的时候,就需要原作者去进行 RResolve 了:
![](https://static001.geekbang.org/infoq/30/30e60df600d721f42d3034430fd00daf.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
5.3) 或者有冲突的 pr 直接 close:
![](https://static001.geekbang.org/infoq/f0/f0fada73c5b167abb580c853d2c1b731.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
总结下来有以下三种情况:
无冲突直接 merge
有冲突手工 merge
有冲突 close 并重新发起 pr
6.Fetch(实际使用的相对较少,更多的使用 remote)
有时候我们 fork 了项目,但是很有可能我们对项目的修改会比原项目滞后,这就会导致pr
的时候容易出现conflict
;为了能让我们知道当前的修改是否 conflict,就需要使用 git fetch 命令了;
使用 git fetch 拿下来一个远程分支的文件,看一下这个分支和我自己的有什么冲突。
7.Remote
7.1)先使用git remote -v
命令来查看本地仓库与远程仓库的关联关系
![](https://static001.geekbang.org/infoq/d3/d34bc50e055ba2191b19f91e2747a144.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这个时候我们可以增加一个remote
,选择原仓库的HTTPS
地址,使用git remote add <远端名> <远端地址>
命令来添加一个remote
:
![](https://static001.geekbang.org/infoq/cf/cf5de1438521272ac07c3f387a5eed91.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
7.2)再将远程端的 master 分支 fetch 到本地:
![](https://static001.geekbang.org/infoq/b2/b2efc1b2320f15da79f2e496f14ad365.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
7.3) 这时候使用 git merge 将当前 master 分支与远端分支合并:
![](https://static001.geekbang.org/infoq/58/585e3b548c24700ab91f7989ea41b370.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
结果中我们发现产生了冲突,再使用git status
命令查看:
![](https://static001.geekbang.org/infoq/d8/d8c289d187513eb1b20a0f5b5e09bedc.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
发现两边都修改了README.md
,这个时候我们使用vi
对README.md
进行查看,当我们merge
的时候,系统会把文件换成以下的展示模式:
![](https://static001.geekbang.org/infoq/c0/c09a721e87dabf6e4cb3888e36e4a087.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这种展示模式的意思是以等号=为分隔符,等号上方为当前分支的修改,等号下方为远程分支的修改,这样就产生的冲突,我们可以手动进行修改,然后 merge:
![](https://static001.geekbang.org/infoq/f0/f0ee82b874eb5530d65b5b9627f11de8.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
![](https://static001.geekbang.org/infoq/6a/6a06512fe218ce8a9204122131bcf7c2.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
7.4) 这个时候刷新 GitHub,在我们自己的分支仓库中可以看到已经成功将修改进行merge
:
![](https://static001.geekbang.org/infoq/57/57fea3e2918f9ac96d493ab344da81fc.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这个时候如果再进行pr
的话,遇见conflict
的几率就会小的多了命令简单总结:
到这里,一个基本的 git 分支管理的流程就走完了,再简单介绍一下 IDE 中的 Git 集成
8.IDE 中的 Git 集成
8.1)将项目用 IDEA 打开,在Version Control -> log
中可以看到我们的提交管理线:
![](https://static001.geekbang.org/infoq/a4/a4e1ef8b02e852bbf4fbcb184a98848e.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
8.2)双击文件可以查看文件 diff:
![](https://static001.geekbang.org/infoq/3a/3a864c4197151b9900578ab993b31f45.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
![](https://static001.geekbang.org/infoq/37/37bb3627089c471a039cf7b18345edc0.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
8.3)在右下角还可以进行 Git 分支的管理:
![](https://static001.geekbang.org/infoq/16/16aadf348f8c197db8bb8c0ab8a89e20.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
版权声明: 本文为 InfoQ 作者【测试人】的原创文章。
原文链接:【http://xie.infoq.cn/article/14453d0923940aa0c900c3a13】。文章转载请联系作者。
评论