Rob Pike是Google的Go语言的主要设计者,他在该语言的Google Group上宣布,Go正在向Git和GitHub迁移。Rob提到,“所有的数据都会保存下来”,但是GitHub不会用于处理pull请求和代码复审。Google的工程师解释说,这方面将使用Google自有的Gerrit,因为它更适合像Go这样的大型项目。
Go语言于2009年年底开源。Rob提到,其开发最初是在Subversion上开始的,后来迁移到Perforce,之后又迁移到Mercurial。未来几个月,该项目将迁移到Git和GitHub,其中包括所有的子库、问题跟踪系统和wiki。
Mercurial给我们提供了不错的服务,但现在是时候继续往前走了。今天的世界和那时已经有很大的不同。
Rob指出,之所以要采用Git和GitHub,决策背后的主要原因是,基于Git的代码复审系统比较适合Go团队的工作流程,而且Go社区中有很大一部分目前在使用Git和GitHub。如前所述,代码复审将使用Google托管的Gerrit。Google的Go工程师Andrew Gerrand在另一个讨论中谈到过Gerrit的使用。据他解释,与GitHub的代码复审工具相比,Gerrit有以下几个优势:
- 在GitHub中,合并pull请求会污染修改历史。Gerrit会自动为主分支上的修改变基(rebase),这样会得到一个比较好看的线性的历史关系。
- GitHub会强制贡献者创建仓库的一个公开分支,即便他们没有写访问权限。
- pull请求中的评论一创建就会发送。Gerrit也支持在一pull请求中提供多条评论,然后只发送一封邮件。
- 对于某个特定的变化,Gerrit支持多个“补丁集”,当复审较大的项目时,这点特别有用。
这则消息宣布时也理清了迁移的时间帧:
在12月初Go 1.4发布之后,迁移会马上完成。1.5的所有开发都会在GitHub上进行;在1.4发布之后,Mercurial树将关闭,不再接受修改。
为将所有数据都转移到GitHub上,在问题提交系统中提交过问题或评论的开发者都应该为迁移其问题提供权限,尽管这并不是强制的。如果没有提供,问题将放在“gopherbot”账户的名下。
这让我们可以访问您的GitHub账户,以便重新创建您的问题和评论,这样当有针对您的问题的修改时,您会得到通知。
在由该消息引发的评论中,有些开发者对给Google权限看他们的私有库和公共库表示担忧。Google的Go语言工程师Brad Fitzpatrick解释说,“GitHub的认证系统只支持这么一个粒度,所以要么放开,要么不放”。