第一次在 Github 上发起 Pull request 是因为在将博客从 Hexo 迁移到 Hugo 的时候,遇到一个问题:

用 Hugo 命令将原先的 Hexo 的博客的源文件,用 Hugo 命令来生成的时候,报个如下的错误:

page.go:750: Failed to parse date '2016-03-06 15:28:01' in page xxxxxx.md.

为了方便迁移,所以看了下 Hugo 的相关源码,发现它调用了cast库的转换代码,如下:

// StringToDate casts an empty interface to a time.Time.
func StringToDate(s string) (time.Time, error) {
	return parseDateWith(s, []string{
		time.RFC3339,
		"2006-01-02T15:04:05", // iso8601 without timezone
		time.RFC1123Z,
		time.RFC1123,
		time.RFC822Z,
		time.RFC822,
		time.ANSIC,
		time.UnixDate,
		time.RubyDate,
		"2006-01-02 15:04:05Z07:00",
		"02 Jan 06 15:04 MST",
		"2006-01-02",
		"02 Jan 2006",
		"2006-01-02 15:04:05 -07:00",
		"2006-01-02 15:04:05 -0700",
	})
}

可以看到,这些格式,都与 Hexo 默认的日期的格式不一样,Hexo 的是yyyy-MM-dd HH:mm:ss,所以,为了将种格式的字符串转换为 Hugo 所能理解的日期的格式,就必须要添加这种格式的字符串让 Golang 解析。

当时想着,可以发起一个 Pull request, 看看能不能加入自己添加这个格式日期的 layout,这样子,就不用自己维护了,也方便其他将 Hexo 迁移到 Hugo 又不想自己修改源码来迁移的朋友了。这就开始了我的 Github 上第一次 Pull requst。(虽然改动的非常小,就添加一行代码,其实我也不太清楚为什么当时没有添加这种日期的格式上去,但是测式代码还是要提供的)

Pull request 使用

Fork

要发起 Pull request,首先第一步去 Fork 你想修改的开源项目。

修改源码

fork 完之后,你就可以在自己的代码仓库上, checkout 这个项目代码下来本地进行修改了。

  • 创建一个新的分支,比如叫feature-xxxx(添加功能),或者fix-xxx(修bug)等。

  • 进行修改代码

  • 查看本地的 git 配置的用户名和邮箱是否与 github 上的一致

这一步非常重要,我在发起 Pull request 后,发现要进行CLA签名(就是 Contributors License Agreement,贡献者许可同意证书),如果你的本地的用户名和邮箱,与 github 上的不一致,就会导致这个 CLA 这步通不过。

img

  • 提交你的内容(代码,注释,文档和测试代码,尽可能详细)

这步也非常重要,最好要说明一下,你修改这段代码的前因后果,都交待以及说明清楚,必要时提供文档和截图。总之尽可能详尽。

  • push 你的修改后的分支到你的 githhub 远程仓库

发起 pull request

登录 github 进入对应的项目上,github 会提醒你,是否要发起一个新的 Pull request。这时确认,然后就可以提交你的 Pull request 了,然后剩下的就等开源项目成员是否Merge 你的代码了。

后记

第一次发起 Pull request ,当时是非常激动的,哈哈。我想一个程序员最大的成就感,想必就是得到同行的认可,以及有大量的开发者使用你的项目或调用你的代码了。^_^

Github 上 pull request 的一小步,人生的一大步.

更新 2016-11-16

因为第一次提交的时候,本地提交的代码的邮箱及用户名与Github上的账号不一致,所以导致Github上的CLA检查一直不通过。最后,自己在Github上关闭了原来的Pull request, 然后修正了本地的邮箱和用户名再次提交一次Pull request,这时CLA就变成绿色的勾并通过了。

最后,自己第一次的Pull request也被Merge到master分支了。哈哈.

img