• 17197阅读
  • 12回复

如何参与Tianchi(天池)项目以及如何贡献代码 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2013-04-16
— 本帖被 XChinux 执行置顶操作(2013-04-16) —
Tianchi项目(天池Qt共享库项目,参见关于《天池共享源码库》最新版本v0.0.2的功能列表请看)现已正式启动,程序放在github上面,地址是https://github.com/qtcn/tianchi,希望参与开发和维护的人员(包括开发、文档、测试等)并具有提交权限(即可处理Pull Requests提交上来的merge和patch),请首先到下面网址报名(是否具有提交权限,会根据实际参与情况进行处理):

http://www.qtcn.org/bbs/read-htm-tid-52866.html

当然,对于非经常性参与项目或者不熟悉git和github的朋友,也可以通过发邮件(qtcn_tianchi@groups.163.com)或者直接在项目讨论区(http://www.qtcn.org/bbs/thread-htm-fid-105.html)发帖来贡献代码,项目维护人员会将其加入到github中。

对于项目代码中的其它要求,请查看项目doc目录下的内容,有任何问题请发邮件到qtcn_tianchi@groups.163.com



     已报名tianchi项目开发的朋友们,请查看QTCN 天池项目版块的帖子内容,以了解如何参与项目开发,根据自己的情况,参与具体的工作内容(后面会说明),提交到github.com上即可,有问题需要沟通探讨的,请在skype讨论组、qtcn.org管理组QQ群里讨论(QQ、skype在报名时会添加),或者直接发邮件讨论也可以(邮件列表名单在报名时会告知),或者在QTCN 天池项目版块中发帖子讨论。



暂订当前工作内容为以下各项:
1. Tianchi库标准的制定。(由核心成员负责)
2. 合并代码到Tianchi正式库中。(由核心成员负责)
3. 编写Tianchi的演示(测试)程序。
4. 在不同环境下的编译,和可用性, 对演示程序进行测试。
5. 编写使用文档(直接以doxygen支持的格式写在代码中)。
6. 对代码进行走读,提出BUG或改进建议等。
7. 搜集功能需求和用户反馈(张帖到论坛Tianchi版块)
8. 搜集现有代码,必要时联络作者,确认能否合并入 Tianchi.
9. 改写网上不兼容的代码,注意需要注明出处。收集时尽可能发通知告知作者。
10. 整理发言稿或其它与软件技术无关的资料等。
11. 推广和宣传工作。




开始工作前,请然后仔细阅读下面的关于git和github的使用帮助内容:
1. Set Up Git
注:该步骤所有开发人员适用。如果采用ssh key方式使用github repo,则请阅读下面的链接
Generating SSH Keys

2. Create A Repo
注:参与开发Tianchi项目,则不需要该步

3. Fork A Repo
注:该步骤所有开发人员适用。

4. Using Pull Requests
注:该步骤所有开发人员适用。(向fork repo)提交贡献,有两种方式,一种是直接修改代码申请合并,另一种是生成patch。

5. Merging a pull request
注:具有qtcn/tianchi库的提交权限的人员适用该步骤。这里需要根据用户所提交的pull request的内容然后在线或者本地合并代码并提交(如果用户提交的是patch文件,则只需要打补丁提交)



下面,我们列出Mort网友的一篇文章,以供大家学习参考github的使用:http://www.soimort.org/posts/149/


Pull Request的正确打开方式(如何在GitHub上贡献开源项目)


27 Mar 2013, by Mort
GitHub的官方帮助如下:
发现这个官方文档写得比较简单,并没有提到开源项目协作方式的一些必要的trick(比如建立topic branch),还有Pull Request的运作细节也没有提到。写个简单的总结补充一下。

Step 1: Fork原项目


这个不解释了,单击一下鼠标就能做到的事情。参见GitHub帮助的原文
记得用git remote add添加上游远程库的地址,否则无法追踪上游库的更新。

Step 2: 创建你的主题(topic)branch


这一步非常重要。GitHub的帮助里没有提到创建主题branch的必要性,你当然可以直接在原项目的默认branch(如master)上进行工作,但实际上:
如果打算为原项目作贡献,强烈建议你为每个主题创建一个单独的branch。
举例:如果需要修复原项目的一个和Unicode相关的issue:
$ git branch fix-unicode-error$ git checkout fix-unicode-error
然后在自己的主题branch(这里是fix-unicode-error)下进行工作。

Step 3: 在主题branch下完成需要的工作


记得push相应的主题branch到GitHub。

*(针对贡献者)rebase还是merge?


从实用的角度来讲,
  • 当你在主题branch下工作,想要导入来自上游库的(与你当前的工作不冲突的情况下)更新时,使用git rebase。

例如,(假设上游branch为upstream/master)
$ git rebase upstream/master fix-unicode-error
或者直接(如果当前branch已经是fix-unicode-error):
$ git rebase upstream/master
这将把当前branch的开发“base(基础)”推进到一个新的起点,而不会引入多余的commits。
  • 当你在某个branch下工作时,git merge可以用来合并来自其他branch的更新。

如果merge的branch来自远程库,一次merge操作会增加一个额外的commit(“Merge branch 'master' ofsomething”)。如果在一个需要发送Pull Request的主题branch下面进行这种操作,(我个人觉得)这不是一种干净的手段。
当你在主线branch(例如master)下进行开发时,git merge可以用来吸收其他开发branch引入的新特性(包括主项目维护者用来直接merge Pull Requests),很恰当。

Step 4: 发送第一个Pull Request


GitHub的界面:左边选择base branch,右边选择head branch。

  • base branch:相当于target branch,你希望Pull Request被merge到上游项目的哪个branch里。为什么要叫base branch:base可以理解为你在进行git rebase操作时的那个“base”,也就是你的主题branch所基于的开发base(基础)。

head branch:相当于source branch,你希望自己开发库里的哪个branch被用来进行Pull Request(当然也就是你的主题branch)。
  • 为什么要叫head branch:参见下面关于head的定义。

注意head与HEAD(大写)的区别:

  • head:简单地理解,就是指向某个commit对象的一个reference。它可以是一个branch的名称(例如,默认的master),也可以是一个tag的名称。一个库可以同时有任意多个head。

  • HEAD当前活动的head。在任意时刻,存在且仅存在一个HEAD。它可以是指向当前branch的head(比如,指向master,假如master是当前branch的话);也可以不指向任何特定的branch(这叫做detached HEAD)。

系统会从你选择的head branch(在这里,是主题branch)的这个head开始匹配所有不包含在base branch中的commits,然后自动视作你的主题branch相对于base所增加的新特性,放进同一个Pull Request中提交。

Step 5: Pull Request发送之后……


一旦你从自己的主题branch(例如fix-unicode-error)推送了一条Pull Request,那么在这条PullRequest被关闭之前,再次向这个branch里push代码,所有的commits都会被自动追加到这个PullRequest后面(不需要再另开Pull Request)。
这个功能尤其有用,比如你最初提交的Pull Request里存在某些问题,项目维护者要求你打回去修改;或者要求你给你的新feature添加一条相应的unit test(这种情况简直太常见了)。只要追加commits到你的这个主题branch中即可。
(题外话:如果原项目有Travis CI,那么它也会在每次追加push之后对Pull Request重新执行一遍测试)

*(针对项目维护者)cherry-pick、format-patch和am


这几条命令主要针对项目的维护者,稍微提一下。
git pull和git merge是GitHub上最常用的merge Pull Requests的方式,在命令行下merge之后,GitHub上面的Pull Request也会相应地自动关闭。
如果贡献者一次提交了多条commits,有些是维护者并不想要的,可以用这几条命令来选择性地手动commit。(这也适用于某些项目不是借助于GitHub的Pull Request,而是通过邮件列表和patch文件来进行协作开发的情形)
在这种情况下,GitHub上面的Pull Request并不能自动关闭,需要维护者手工操作。

Step 6: Pull Request关闭之后


如果是已经被merge后关闭的Pull Request,你可以在页面的最下方找到一个“Delete this branch”的蓝色按钮
这表明这个主题branch的历史使命已经完成(fix-unicode-error的commit已经被合并到主项目中),可以安全地从远程库中删除了。
在本地库中亦可删除这个branch:
$ git branch -d fix-unicode-error
反之,如果你的主题branch并没有被merge就被维护者关掉的话,你还可以继续再拿它来开新的Pull Request去骚扰主项目(´▽` )。

总结


在哪些情况下可以直接使用master branch来提交Pull Request:
  • 你只想为主项目贡献某一处代码,贡献完自己的repo就可以扔的那种。
  • 你打算为主项目长期贡献代码,而且希望追随原项目的主线开发,不保留自己的特性。
  • 你打算为主项目长期贡献代码,默认master branch追随原项目主线,把自己的特性放到别的branch中。

在哪种情况下应该使用主题branch来提交Pull Request:
  • 想用master branch完全来做自己的开发。在这种情形下:会从上游库合并更新,但是这些merge本身的commits显然不可能作为返还到上游库的Pull Request的一部分。
  • 存在自己的(未被merge或者不想被merge到上游库的)commits。

鉴于Git的分布式开发哲学,每一个库均可以看作是一个独立的项目,显然是后一种(为每一个新特性建立一个专门的主题branch来向主项目推送Pull Request)的贡献方式更可取。
解释完毕(`・ω・´)




二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线novesky

只看该作者 1楼 发表于: 2013-04-16
这个项目是干嘛的?
离线stlf

只看该作者 2楼 发表于: 2013-04-17


天池共享源码库(以下简称Tianchi),是一套采用 C++ 语言,并且基于 Qt framework 的扩展库。
    创建该库的目的是为了进一步简化使用 Qt 开发过程中的复杂性。

    Tianchi 将考虑涉及各功能模块的类库、控件、插件等。

    Tianchi 采用全部源代码提供方式进行共享和参与。

使用
    允许任何人或机构均将 Tianchi 用于学习、工作以及商业等法律允许的场合。
    发布软件时,必须明确说明软件中包含了Tianchi,以及相关信息。

免责声明
    任何人可以对 Tianchi 提供代码、并更新、测试、建议等,一旦将代码提交到 Tianchi 库中,
    自动视为向 Tianchi 进行代码所有权的授权行为,并允许 Tianchi 团队对其进行改进、扩展、
    整合、甚至删除。

    代码提供者需要自动确保提供的代码具体版权,一旦存在版权纠纷,所产生的一切法律后果,将全
    部由代码提供者自行承担。

    倘若代码版权人发现 Tianchi 存在未经授权的代码,请及时通知 Tianchi 团队进行删除操作。

    由于 Tianchi 团队无法对历史版本进行修正或再发布,因此只能承诺对下个正式发布版进行修订。


官方论坛:
    http://www.qtcn.org/bbs/thread-htm-fid-105.html

发布位置:
    https://github.com/qtcn/tianchi

参见:
    http://qt-project.org
    http://qt-project.org/downloads

离线wzg_j

只看该作者 3楼 发表于: 2013-04-17
主要是拓展哪方面? 没有一个明确的介绍么?
离线XChinux

只看该作者 4楼 发表于: 2013-04-18
对于非经常性参与项目或者不熟悉git和github的朋友,也可以通过发邮件(qtcn_tianchi@groups.163.com)或者直接在项目讨论区(http://www.qtcn.org/bbs/thread-htm-fid-105.html)发帖来贡献代码,项目维护人员会将其加入到github中。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ninsun

只看该作者 5楼 发表于: 2013-04-20
依旧不清楚这个项目的目的……
比如说,我可以把我用Qt封装的ZMQ接口以及简单的客户端与服务器放到这个项目里面吗?
离线XChinux

只看该作者 6楼 发表于: 2013-04-20
就是要建一个Qt共享代码库,来方便大家的使用。
任何人都可以贡献代码。

二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 7楼 发表于: 2013-04-20
引用第5楼ninsun于2013-04-20 18:06发表的  :
依旧不清楚这个项目的目的……
比如说,我可以把我用Qt封装的ZMQ接口以及简单的客户端与服务器放到这个项目里面吗?


任何人都可贡献代码,看这个:
http://www.qtcn.org/bbs/read-htm-tid-53642.html
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ywmlovecss

只看该作者 8楼 发表于: 2013-05-19
感觉这套git使用就够蛋疼的!!被你这么一说反而糊涂了!!!
离线XChinux

只看该作者 9楼 发表于: 2013-05-19
就首次使用时麻烦点,要设置ssh key,要设置remote upstream等。
以后每次使用时就挺简单的。
如果本地不建分支的话:
(开始时)
git clone http://github.com/test/tianchi.git
git remote add upstream http://github.com/qtcn/tianchi.git
======================

git pull                            // 拉取tianchi fork
git fetch upstream       // 获取qtcn/tianchi
git merge upstream/master   // 合并qtcn/tianchi到本地
git commit -a -e            // 修改后提交到本地
git push                          // 推送到tianchi fork
==================
然后上github.com上的tianchi fork页面,点击merge/pull request就OK了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线neil-wen

只看该作者 10楼 发表于: 2013-08-16
不错  不错  
离线facatcool
只看该作者 11楼 发表于: 2013-10-16
请问新人应该从哪里开始呢?要是有bug列表之类的我倒可以帮着修复一些bug。
离线XChinux

只看该作者 12楼 发表于: 2013-10-16
先了解tianchi的目录结构构建方法,读几个gui类,看下怎样写,然后照猫画虎写就行了。写Qt库和知名第三方Qt库没有的功能。在github上发起合并。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个