原文(Github repository形式): https://github.com/Wasdns/github-example-repohtml
本文记录了我对于Github使用的一些技巧,并针对如下几个方面:git
给出了本身的一些建议,不足之处欢迎各位指出,欢迎补充和提问:)。github
在提问以前,请确认你的问题是否可以经过如下方式解决:(1)百度;(2)bing;(3)Google;(4)Stackoverflow。ubuntu
一个参考的主要提问步骤分为:ruby
错误示范:WTF the bug is?markdown
参考样例:"error: HashAlgorithm.csum16: Invalid enum tag"ide
对于一个commit来讲,一个完备的注释信息有助于让其余人了解你的此次提交作了什么工做。例如,项目管理员对PR进行code review时须要对于该PR的每一次提交进行审核,若是每次提交的注释信息都很是简单/杂乱,那么对于code reviewer来讲是很是不友好的:他须要翻看你每一次文件的修改记录来判断你的此次提交作了什么工做。svn
一个规范的commit有这样的几个特色:函数
1.注释信息的标题有一句清晰的概述,且主体内容简洁明了:单元测试
标题至少须要有一句完整的句子(建议少于50字)来讲明本次提交作了哪些工做。在大部分同窗的github中,每次提交的注释信息一般只有"更新"、"修改"几个单词,其余开发者天然很困惑:到底你更新了什么、修改了什么?只能经过查阅详细信息来查看此次commit的具体修改。一个参考的规范注释信息标题的格式为文件名:简述改动信息
。
错误示例:fix bug
,更新
,发布
;
参考示例:文件名:简述改动信息
,如:README.md: 更新第三章,加入了对commit注释信息的描述
。
此外,要求注释信息的主体内容在能让别人看懂的状况下尽可能简洁明了,不加入过多的没必要要信息。
错误示例1:我把今天志玲女神写的代码给删除了。
其中今天志玲女神写的代码
是不明确且没必要要的,并且没有体现出本次提交的目的。
参考示例2:修改"你今天真好看"功能的API:删除了文件hello.c中的函数模块printBeauty(),修改了函数hello()的返回参数类型。
错误示例2:今天客户A那货提出了一个需求叫作"你今天真好看",后面的同窗注意了,我把原来文件hello.c中的一些功能作了适配,来支持这个新功能。
参考示例2:增长"你今天真好看"功能:修改hello.c中函数hello()的返回参数类型。
2.注释信息的拓展描述中,对于每一处的修改都有清晰的记录:
若是一个提交修改了项目中的多个文件/模块,能够将这些修改的共同点,如加入新功能"你今天真好看"
,做为提交注释信息的标题,并将这些修改的具体信息在注释信息的文本栏中分点列出。
错误示例:
Commit Title:
按今天客户A的需求加了一个新功能
Commit Content:
修改了文件hello.c, beauty.c, stupidClient.c。
参考示例:
Commit Title:
2017/10/1:加入新功能"你今天真好看"
Commit Content:
1.修改文件hello.c:hello函数返回参数类型(L101); 2.修改文件beauty.c:将hello函数结果进行输出(L20); 3.增长2017/10/1的客户需求到文件stupidClient.c中。
3.注释信息应保留必要的信息:
假若你认为这一次的commit是有必要的,那么请在注释说明中说明如下必要的信息:
错误示例:
Commit Title:
Fix bug // 它解决了什么问题?
Commit Content:
// 此次commit是如何解决问题的?影响的文件有哪些? <Empty>
参考示例:
Commit Title:
Fix bug #1 // 它解决了issue#1,所以此次修改是必要的
Commit Content:
// 此次commit经过...解决了问题。影响了文件src/hello.c。 1.修改文件src/hello.c:修改hello_beauty()函数的返回参数类型(L30); 2.在单元测试中增长测试test1,避免#1的重复发生。
此外,有一些commit彻底没有必要,或者对于该项目毫无心义,好比:
错误示例1:小陈为了刷KPI(Key Performance Indicator,关键绩效指标),将文件A中全部的空行删除,作了一次提交,内心美滋滋的。
错误示例2:负责在Github上进行某个项目开发的小李被开除了,被迫离开了如今的公司;在离开前,她将本地仓库中全部的内容删除,并将这些修改提交到了项目中,以此宣泄心中的愤恨。
不提交没有必要、毫无心义的commit是每个项目成员应该遵照的规范。
一些建议:
(1)我的推荐以Github的客户端,如Github Desktop为主、命令行为辅来进行commit提交,写提交信息时的效果图以下:
此外,还能够在desktop上查看历史的提交记录:
(2)在使用命令行进行提交时,一般使用git commit -m '注释信息'
来填写commit注释信息,可是-m
参数适合单行注释,对于多行的commit注释来讲是不合适的。这里推荐使用git commit -v
命令,会自动跳出文本栏以供commit注释信息的编辑,其中文本的首行将做为commit的标题,剩余部分将做为补充信息。
(3)若是某次提交修改的范围很是大,即改动了很是多的文件,建议划分为屡次commit,每次提交一个子模块并加以对应信息的说明;若是某次提交修改的范围较小,好比只修改了一个文件中某个变量的赋值操做,能够酌情与其余commit合并为一个commit,在注释信息中说明这一点便可。
(4)阮一峰老师写了一篇关于Github commit注释信息的博客:Commit message 和 Change log 编写指南,介绍了AngularJS团队的commit注释信息格式,这里推荐给你们。
<type>(<scope>): <subject> // 空一行 <body> // 空一行 <footer>
拓展阅读:
一个规范化、详细的文档是一个优秀项目必不可少的内容。在Github上有两种撰写文档的方式,一种是"README",另外一种是wiki,本节主要介绍笔者在使用README进行文档记录的一些经验,主要包括:
方法一:
在建立一个新的项目时,有一个名为"Initialize this repository with a README"的选项,勾选便可为该项目建立一个README文档:
在项目目录中,该文件是"README.md",.md
后缀代表该文件是Markdown文件,使用Markdown文本编辑语言进行文件编辑。
方法二:
在项目主页中,有一个名为"Create new file"的按钮,如图红色阴影部分所示:
点击进入建立界面,在"Name your file"一栏中,填入以.md
后缀名结尾的文件名,如"README.md":
Github默认在页面中显示使用"README.md", "readme.md", "README", "readme"做为名字的文件内容;其中在显示"README.md"和"readme.md"文档时,Github基于Markdown语法对其进行显示,好比将文件的内容:# [标题名称]
以一级标题的形式显示出来。
紧接着就能够在下方的文本框中开始文档的撰写了。此外,Github支持在线的文档视图,点击如图红色方框 "Preview"(建立文件时显示)/"Preview changes"(修改文件时显示) 所示:
便可将刚才新增/修改的内容以可视化的形式呈现:
最后,合理在commit中描述该文档,并将该文档提交到你的项目中:
方法三:
在主机的仓库中建立README文档,并提交至Github上。该方法再也不具体阐释。
注:上文中建立的README文档即项目中的simple-README.md。
这里为读者提供了一些用于掌握基本的Markdown语法的参考资料,包括:
Github上README文档的记录、修改与普通的Markdown文档的记录、修改无异。
Github官方给出了一种通用的README文档格式:
标准语言:English。
一个实验室Github科研型项目,README文档参考示例由如下几个部分组成: