注:我们的 Airtest 官方公众号(AirtestProject)会持续更新大家对于 Airtest 感兴趣的问题,欢迎有需要的同学关注并查看我们更多的内容。
如想向我们反馈关于 AirtestProject 想了解的问题,欢迎到公众号后台留言。
上期在 “如何拉取远程仓库的分支到本地测试” 的帖子里,我们向大家介绍了如何在本地安装并使用Airtest
在 Github 上面的源码。这期我们来讲一下剩余那部分的内容:“如何上传本地的修改到Airtest
仓库上给其他用户使用”,即如何给开源项目贡献代码。
需要注意的是,clone
操作是不需要项目权限的,只要你注册了 GitHub 账号,就可以把开源的项目clone
下来,就像上期教程我们所演示的那样,可以直接从开源项目那里把项目clone
下来。
但是如果你想要贡献代码,即把你本地的代码上传到项目的远程仓库的话,一般都是不能直接传的,因为大部分人都不是项目的开发者,没有直接push
代码的权限,所以贡献代码的流程大致如下:
fork
原始项目到自己的账号下fork
到的项目到本地进行修改push
代码到自己账号的项目仓库里merge
到原始项目的仓库里下文是具体的操作方法。
首先我们需要打开这个开源项目的url
:https://github.com/AirtestProject/Airtest ;然后点击右上角的Fork
按钮。
等待一段时间后,开源项目AirtestProject/Airtest
就被复制到我们自己的仓库里面了,命名为你的用户名/Airtest
:
这个 Fork
后的项目是我们自己账户上的项目,所以我们可以随意修改,且并不会影响到真正的AirtestProject/Airtest
项目的。下面我们把它称之为子仓库。原始项目的那个仓库,在下文我们称之为主仓库。
在本地目录下,右键Git Bush Here
,输入以下命令把自己账户上fork
得到的仓库(子仓库)clone
到本地:
# Clone 到本地的项目目录
git clone https://github.com/your-user-name/Airtest Airtest
进入刚才clone
好的Airtest
目录,右键Git Bush Here
,默认进去的是master
分支。如果我们是在别的分支上做了改动,比如 aaa 分支,就可以输入以下命令切换到 aaa 分支:
# 创建并切换到 aaa 分支
git checkout -b aaa
想要提交本地 aaa 分支上的修改,我们可以使用以下命令将提交修改到本地仓库上:
# 添加修改过的文件
git add 文件名
# 提交commit
git commit -m "改动的描述"
# 可以使用下述命令添加所有文件
git add -A
提交commit
之后,我们并不能马上push
代码,还需要同步主仓库上的更新;因为这部分的内容比较复杂,所以我们需要先来理解一些概念:
pull request
,很可能会被主仓库的管理员拒绝origin
是用来向子仓库提交更新的远程仓库,Git 会默认把origin
与你的子仓库关联在一起,可以通过git remote -vv
查看
upstream
或是其它你喜欢的名字,还可以通过git remote -v
查看仓库之间的关联
了解了上述的概念之后,我们假设已经手动添加了upstream
,并且upstream
已经更新了很多提交,我们就可以用以下的方式拉取并合并upstream
上的更新:
# ①切换到 master 分支
git checkout master
# ②使用 rebase 模式拉取 upstream/master 上的更新,然后与本地的master合并
git pull --rebase upstream master:master
# ③切换到 aaa 分支
git checkout aaa
# ④使用 rebase 模式合并本地的 aaa 和 master 分支
git rebase master
或者我们还可以使用下面这种方式拉取合并 upstream 的更新:
# ①切换到 master 分支
git checkout master
# ②获取 upstream 上的 master 分支
git fetch upstream master
# ③切换到 aaa 分支
git checkout aaa
# ④使用 rebase 模式合并本地的 aaa 和 upstream/master 分支
git rebase upstream/master
完成了上述的更新合并以后,我们才可以把代码push
到子仓库上:
# 将本地 aaa 分支的代码 push 到 origin 的 aaa 分支
git push origin aaa
push
代码以后,会跳出 GitHub 网站的登录弹窗,登陆后会智能识别并弹出按钮 Compare & pull request
,点击后填写一些信息即可向主仓库发起pull request
。
需要注意的是,主仓库的开发人员收到你的申请以后,他们还会对你的改动进行审核(即像上一篇推文讲述的那样,把你的代码拉取到本地测试一下),只有审核通过才会真正被merge
到主仓库上。
举个例子,在我们Airtest
项目下,有一个项目支持设备列表的文档 https://github.com/AirtestProject/Airtest/blob/master/docs/wiki/platforms.md ,但是因为设备很多,我们更新不过来,所以有一些热心的用户,就会在自己本地fork
的项目上面修改了这个platforms.md
文档,然后再向我们发起一个pull request
:
项目的管理员收到这个pull request
之后,就会查看用户修改了什么地方:
如果这个用户的pull request
没有问题,Airtest
的项目管理员就会 merge
这个pull request
到主仓库上。至此,该用户就可以成为 github 上面 3k star 项目的 contributor 啦!
最后,如果大家对 Airtest 有疑问、BUG、建议,请到https://github.com/AirtestProject/AirtestIDE/issues 发布 issue,我们会有专人解答。同时,我们还提供了官方 QQ 群给大家沟通交流,目前 1 群已满,欢迎大家加入 2 群: