【2013年8月29日 51CTO外电头条】 也许很多朋友还不太了解,GitHub可以作为一种非常高效的项目开发协作机制。在任何拥有互联网连接的区域,开发人员都可以随时与全世界自由共享代码成果(更不必提强大的工具支持、提交历史源检查以及便捷的查看方式)。GitHub已经成为众多大型开源项目的立足之地,允许来自全球的开发人员共同协作、做出贡献。
但我们要如何才能加入到项目中来并做出自己的贡献?当然,相信大家已经了解如何利用Git来追踪文件变更并将文件推送到服务器端。不过对于大型开源项目而言,GitHub还能带来其它一些更为显著的助力,这也使GitHub成为最为理想的项目温床。在今天的文章中,我们将共同讨论开源项目合作过程中的通用规则,并介绍一些大家可能会涉及的知识及灵感。
从小处入手
不要抗拒从小处入手
在着手进行开源项目协作之初,最重要的一点在于正确认识自己的角色定位。通常情况下,很多工作完全可以由我们自己独立完成而不必劳烦专业技能出众的编程人员。事实上,害怕自己不足以胜任合格程序员的念头是影响大部分开发者迈入开源项目领域的最大障碍。不要抗拒从小处入手,先别急着解决什么重大错误或者重新编写整个模块。最好的起点就是尝试寻找小型缺陷,例如说明文档内容缺失或者进行跨设备的检测及修复工作,甚至连修正简单的语义错误及语法问题也是很有价值的贡献。
这些较为初级的任务能够成为大家初步迈入开源贡献者门槛的良好开端,而且不必担心碰到自己无法解决的重量级难题。大家可以注册CodTriage将GitHub问题自动发送至您的个人邮箱。在查看收件箱时,只要感觉有信心搞定当前工作,就请放心大胆地发送接手请求。(我们将在本文稍后位置继续讨论其具体实施过程。)
了解项目的相关生态系统
对于任何协作内容,都可能存在一系列已经被全球开发者所广泛认可的约定。其中可能包括一套词汇集、贡献方式以及提交信息的固定格式,甚至语法标准也已经拥有标准化规范,这就要求每一位贡献者提前做好了解。在我们尝试介入某个项目之前,请阅读与工作相关的全部说明文档。举例来说,GitHub提供标准化CONTRIBUTING.md文件(大家可以点击此处查看jQuery入门指南帮助自己熟悉这一流程)。这些指南文件将由维护代码库及主分支的开发人员进行维护。
另一种了解项目生态系统的方式在于查看现有代码库以及git日志。通读开发者提交的信息并认真体会代码风格能够帮助大家进一步了解关于项目的方方面面。通过对项目说明文档的阅读,我们可以采用更为合作者所熟知的词汇,从而保证自己的贡献内容继续保持同样的叙述风格。
一旦我们已经成功融入项目的现有文化生态系统,接下来该如何贡献代码?
通过pull request工作流进行代码贡献
贡献代码的工作流程可能令人望而生畏。最重要的一点是要记住按照当前工作项目(正如我们前面所讨论过的)的模式及标准处理工作。GitHub所支持的一般性工作流程其实没那么困难。
1.将目标repo发送到自己的账户当中。
2.将repo克隆到自己的本地设备当中。
3.查看新的“主题分支”并做出变更。
4.将主题分支推送回自己的fork。
5.利用GitHub上的差异查看器创建一条pull request。
6.根据请求进行变更。
7.将pull request进行合并(通过在主分支当中),然后将主题分支从上游(目标)repo当中删除。
在整个工作流程当中,根据给定项目的不同、其具体内容也会出现很多差异。举例来说,主题分支的命名约定可能有所区别。某些项目使用诸如bug_345这样的公约,其中345代表已经提交的GitHub问题ID号。某些项目更倾向于提交相对较短的消息。我们将通过以下一系列命令完成前面提到的工作流程。
第一步: 进行Fork
在GitHub.com上对repo进行fork。
第二步: 进行克隆
利用右侧边栏中的URL对repo进行克隆:
- git clone git@github.com:jcutrell/jquery.git
第三步: 添加上游远程仓库
切换到克隆目录,在这里大家可以添加上游远程仓库:
- cd jquery
- git remote add upstream git@github.com:jquery/jquery.git
以上命令现在允许大家将本地源中的变更提取出来并加以合并,如下所示:
- git fetch upstream
- git merge upstream/master
步骤四:检查主题分支
不过在大家执行自己的变更前,请先对主题分支进行检查:
git checkout -b enhancement_345
步骤五:提交
现在,大家可以执行变更并创建commit以追踪具体变更内容。
- git commit -am "adding a smileyface to the documentation."
步骤六:推送
接下来,大家将把主题分支推送到自己的项目fork当中。
- git push origin enhancment_345 ‘
第七步:创建pull request
最后,大家需要创建一条pull request。首先,查看repo中的fork,我们可能会看到一条"您最近推送的分支"。如果结果确实如此,则可以选择"比较并pull request"。如果显示其它结果,则可以在下拉菜单中选择自己的分支,随后单击repo界面右上角的“pull request”或者“比较”按钮。
通过“比较并pull request(Compare and Pull Request)”按钮创建pull request
通过分支下拉菜单创建pull request
两种方式都会将我们引导至同一个页面,在这里大家可以创建pull request并在其中添加评论意见。该页面还以直观方式显示出我们所做出的各项变更。这将帮助项目管理员更轻松地查看自己已经完成的工作,同时简化决策过程、更快决定当前内容是否适合提交。如果变更存在问题,管理员可以在评论中提出质疑;管理员还可以要求我们清空pull request并重新提交,然后关闭pull request。
请注意,向项目管理员表达充分的尊重对于开源贡献而言非常重要;毕竟我们总是能够使用代码的分支版本,如果管理员不打算pull我们的变更,这往往与他们的角色定位有关。请记住,根据GitHub员工Zach Holman在《GitHub如何利用GitHub来创建GitHub》一文中所说,pull request实际属于对话的过程。最重要的是认同管理员的处理方式;相对于一味要求对方接受我们提交的内容,大家应当调整心态、只把提交过程视为与编写代码相关的对话通道。
GitHub Issue+Pull Request=项目管理最佳效果
GitHub提供GitHub Issue,这是一种非常有效的途径,帮助我们为任何特定项目创建记录化、交互化以及自动化的bug或者功能对话。不过Issue可以被禁用,而且其在默认状态下即被禁用。Issue中内置有大量值得称道的功能,但最重要的功能之一在于其与pull request的整合。用户只需在提交消息中加入issue的数字ID,即可轻松在所提交信息中罗列该issue作为参考。例如:
- git commit -am "Adding a header; fixes #3"
这条提交消息会在关联pull request被接受后自动标记3号issue。这类自动化机制使得GitHub成为一款出色的项目开发管理工具。
寻求协作的辅助渠道
通常情况下,大型开源项目会从众多不同类型的协同工作当中受益。
大家千万别误以为开源项目的贡献途径就只有通过pull request来实现。通常情况下,大型开源项目会从众多不同类型的协同工作当中受益。举例来说,像Ruby on Rails这样的项目拥有知名度极高的技术社区,该社区会通过论坛及IRC聊天室回答问题,从而帮助开发人员建立起知识框架。这也有助于在讨论框架的未来发展方向时迅速从中找到谬误之处。
这些协作渠道通常作为前面所提到的支持环境开放,例如论坛与聊天室。当然,开发者之间也可以通过电子邮件体系或者电话会议来定义项目的发展方向,共同创建一套活泼而富有成效的项目社区。如果没有这样成熟健康的社区体系,pull request的效果将大打折扣。
重中之重在于态度
请记住,开源项目的根本动力来自人们分享知识、建立集体智慧并为之付出努力的态度。要想真正参与到项目中来并做出自己的贡献,大家应该即使保持一种好奇的态度--“我能帮上什么忙吗?”--而不应采取较为封闭的态度,例如“我只帮自己想帮的忙”。开源世界中的人们希望与真正乐于帮助他人的开发者一起工作。
总结陈词
如果大家有兴趣参与到开源项目中来,我要首先向您表示敬意!请记住,如果您以正确的态度尝试接近此类项目、愿意从小处入手逐步积累经验,那么我们的名字将同自己的代码一道汇入全球贡献者的成果当中,并最终服务于世界各地的每一位用户。请拿出时间与耐心,认真了解与项目及参与者有关的一切知识。如果能在参与项目的同时找到自己的工作兴奋点,结果将变得更美好。GitHub的力量以及整个开源世界仍然在一天天不断壮大;马上开始与其他开发者们携手前进,您将顺利成为这片新天地中的优秀成员!
原文链接:http://net.tutsplus.com/tutorials/tools-and-tips/how-to-collaborate-on-github/