阅读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

  1. 申请Google Account。

  2. 登录googlesource并生成密码

进入go.googlesourc.com,单击右上角的"Generate Password"

  1. 执行完第2步后,会看到"Configure Git"页面,该页面说明如何配置git使用你的认证token,按说明执行后,在~/.gitcookies文件中可以看到你的token

  2. 注册Gerrit

用你的Google Account登录go-review.googlesource.com/login/

Contributor License

  1. 登录Gerrit

  2. 点击右上角头像的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意见

  1. 同步仓库代码
$ git sync
  1. 继续之前步骤的修改,使用git changegit mail