如何给 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).

This site uses Akismet to reduce spam. Learn how your comment data is processed.