golang/go标准库贡献方式
阅读contribute内容
https://golang.org/doc/contribute.html
准备工作
安装配置go-contrib-init工具
$ go get -v -u golang.org/x/tools/cmd/go-contrib-init
$ cd /code/to/edit
$ go-contrib-init
安装git
配置git使用Gerrit
-
申请Google Account。
-
登录googlesource并生成密码
进入go.googlesourc.com,单击右上角的"Generate Password"
-
执行完第2步后,会看到"Configure Git"页面,该页面说明如何配置git使用你的认证token,按说明执行后,在~/.gitcookies文件中可以看到你的token
-
注册Gerrit
用你的Google Account登录go-review.googlesource.com/login/
Contributor License
-
登录Gerrit
-
点击右上角头像的settings,再点击"Agreements",如果没有任何的agreements,点击"New Contributor Agreement",按提示进行操作。
设置开发环境
安装git-codereview工具
$ go get -u golang.org/x/review/git-codereview
安装完后git-codereview会在$GOPATH/bin
下,把$GOPATH/bin
添加到PATH
。
(Windows的话执行git --exec-path
查看git的执行路径,把git-codereview拷贝到该目录下)
执行以下命令查看是否安装完成
$ git codereview help
设置git aliases
把以下内容写入到~/.gitconfig文件
[alias]
change = codereview change
gofmt = codereview gofmt
mail = codereview mail
pending = codereview pending
submit = codereview submit
sync = codereview sync
代码贡献
讨论设计
在提交代码之前,先去github仓库上提交issue,说明自己的意图,经过讨论后再进行代码的提交
获取Go源码
在除你现有GOPATH外的其他目录下clone
$ git clone https://go.googlesource.com/go
$ cd go
go使用master分支进行管理,确保当前的分支在master
$ git checkout master
$ git sync
贡献子库(golang.org/x/…)
如果贡献的为子库,需要使用go get
命令,获取指定的库
如:golang.org/x/sys
$ go get -v -d golang.org/x/sys/...
修改源码并提交
在修改源码后,先执行git add <filename>
添加修改的文件
执行
$ git change <branch>
<branch>
是本地的分支,不会提交到远程服务端
(git change 相当于执行 git checkout -b branch, 接着执行 git branch –set-upstream-to origin/master, 然后 git commit.)
在最后的commit的时候,会出现一个编辑的对话框,类似
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch foo
# Changes not staged for commit:
# modified: editedfile.go
#
在第一行空白处填写自己的提交信息。
信息内容:
- 本次提交的功能是为了做什么。
- 描述本次修改了哪些地方,并说明作用。如果有引用,最好是在此处表明。
- 如果你本次提交是修复某个issue,在下面写明。
Fixes #123
发送修改到review
$ git mail
在执行完成后,会出现code review的URL
remote: New Changes:
remote: https://go-review.googlesource.com/99999 math: improved Sin, Cos and Tan precision for very large arguments
修改review意见
- 同步仓库代码
$ git sync
- 继续之前步骤的修改,使用
git change
和git mail