如何给 Qt 贡献 Patch

最近给 Qt 5 写了几个傻瓜都能写的 Patch ……目的是修复一些输入法相关的 Bug。当然这不是重点,重点是怎么给 Qt 写 Patch 并提交。

首先 Qt 自从转向开放管理之后,给 Qt 写 Patch 就成为了一件非常简单的事情。

首先不用说,你需要注册个账号,先到这个网站注册个账号,bugreports.qt-project.org,然后打开codereview.qt-project.org ,选择 sign in,sign in之后需要做的就是和一般的代码管理网站一样,添加你的ssh key,然后还需要做的是签署一个协议,在Agreements里面,作为一般人签个 Invidudual的就好,另一种是如果你代表公司向 Qt 贡献,那么则是签那个,然后大概就是需要等这个审核通过,效率还是非常高的,喝口茶大概最多几个小时之后就ok了,然后你就可以通过 gerrit (qt的code review 系统提交 patch 了)。

gerrit 这个东西是个非常神奇的东西,非常好用,如果你熟悉 git 的开发的话就更好了。

其实 Qt 上已经有了非常详细的说明,我这里只简单介绍一下。

首先要配置你的ssh_config ,code review的ssh并非是传统的22端口,而是一个自定义端口,在你的~/.ssh/config 中加入:

 Host codereview.qt-project.org
   Port 29418

首先在你 clone 下来代码之后(from gitorous或者code review都行),

$ git clone ssh://<username>@codereview.qt-project.org/qt/qtbase.git
Cloning into qtbase...
remote: Counting objects: 33523, done
remote: Finding sources: 100% (33523/33523)
Receiving objects: 100% (33523/33523), 69.45 MiB | 901 KiB/s, done.
remote: Total 33523 (delta 16501), reused 33523 (delta 16501)
Resolving deltas: 100% (16501/16501), done.
$

首先需要配置的是 commit msg和commit hook,它能自动生成一个changeid,也就是将来标示你这个修改的id。

$ scp -P 29418 <username>@codereview.qt-project.org:hooks/commit-msg .git/hooks

另外就是需要 clone 一个 qtrepotools,并且把 git-hooks/git_post_commit_hook 链接到你的 .git/hooks/post-commit

并且要保持这两个文件可执行哦。

之后你就可以做你的修改了,做了commit之后你可以git log看看,是不是有 Change-Id: I3db87fdffdb5b01404047e905793ae6e10bb1e90 这样的字样,如果没有的话可是不行的哦,那样你需要检查下你的commit-msg是不是有问题?

如果顺利的话,那么你可以提交你的 review了

$ git push ssh://<username>@codereview.qt-project.org:29418/qt/qtbase HEAD:refs/for/master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 407 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas:   0% (0/2)
To ssh://<username>@codereview.qt-project.org:29418/qt/qtbase
 * [new branch]      HEAD -> refs/for/master
$

然后会生成一个链接给你,可以用来在网站上track状态。

然后需要做的一件事就是找reviewer,那么找谁呢?有以下两种办法…一个是看看你这个文件的修改历史,都有谁review过,reviewer的名字会用 Reviewed-by: 标明,嘛……命中多的大概就相关吧……

还有就是你可以到 #qt-labs @ freenode.net 这个irc频道去询问一下,也会得到回复的。

然后就是等着review了。

运气好的话,可能接下来就你啥事了,当然像我这种二逼青年……头一次就犯了各种傻到家的错误……那你可能需要修改你的代码,这要怎么做呢?

其实非常简单(下面是我自己使用的办法,不知道是否完全正确,不过至少work),首先到网页上找到 git fetch https://codereview.qt-project.org/p/qt/qtbase refs/changes/xx/xxxxx/x && git checkout FETCH_HEAD ,像这样就能找回你的提交,然后做出对应的修改,你可能需要rebase到master或者做一些相关的操作。(我个人建议是不要merge,那样会生成额外的不必要的提交……)

这种时候 git commit –amend 就派上用场,你可以修改你的提交,然后修改完成后再用最开始和提交code review一样的命令,就可以了。注意的是Change-Id 当然是不能改的,否则系统就会认为这是一个新的review。

那么就是这样,Qt的网站上也有很多相关的内容,甚至有视频演示,链接都列在下面可以查看。

http://qt-project.org/wiki/Category:Developing_Qt

http://qt-project.org/wiki/Code_Reviews

http://developer.qt.nokia.com/videos/watch/gerrit_contributing_and_reviewing_a_change

This entry was posted in Qt and tagged . Bookmark the permalink.

4 Responses to 如何给 Qt 贡献 Patch

  1. maplebeats says:
    Firefox 13.0.1 GNU/Linux x64

    git clone国外网站的速度让人汗颜啊。。。这clone一个qt不知道要多久啊

    [Reply]
  2. 右京样一 says:
    Firefox 13.0.1 GNU/Linux

    傻瓜……都能写……完了完了完了我没救了……

    话说虽然不是直接进master,不过这样的话代码质量能保证吗?

    [Reply]
  3. nihui says:
    Internet Explorer 9.0 Windows 7

    @右京样一 傻瓜表示不会写。。

    [Reply]
  4. bsidb says:
    Google Chrome 17.0.963.84 Windows 7

    为啥博客木有留言板啊?
    kio-recentdocument中的void RecentDocument::listDir(const KUrl& url)函数是不是用来列出文件夹的?
    如果在这边“QStringList list”加入一个路径的话是不是就可以显示其他文件夹了?

    [Reply]

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).