Russ Cox (rsc)发现每隔一段时间总会有人表示Go 的首次 commit 是在 1972 年 。rsc认为这种说法显然是非常愚蠢的,并分享了关于 Go 版本控制的更多有趣历史。例如: Go 真正首次 commit 是第 5 个 commit,此前的都是假 commit。
% git log --reverse --stat
commit 7d7c6a97f815e9279d08cfaea7d5efb5e90695a8
Author: Brian Kernighan <bwk>
AuthorDate: Tue Jul 18 19:05:45 1972 -0500
Commit: Brian Kernighan <bwk>
CommitDate: Tue Jul 18 19:05:45 1972 -0500
hello, world
R=ken
DELTA=7 (7 added, 0 deleted, 0 changed)
src/pkg/debug/macho/testdata/hello.b | 7 +++++++
1 file changed, 7 insertions(+)
...
据rsc 所言,Go 使用过的版本控制系统共有 4 个:Subversion、Perforce、Mercurial 、Git。
commit 18c5b488a3b2e218c0e0cf2a7d4820d9da93a554
Author: Robert Griesemer <[email protected]>
AuthorDate: Sun Mar 2 20:47:34 2008 -0800
Commit: Robert Griesemer <[email protected]>
CommitDate: Sun Mar 2 20:47:34 2008 -0800
Go spec starting point.
SVN=111041
doc/go_spec | 1197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1197 insertions(+)
Subversion
Go 开始使用 Subversion 是作为评估Subversion在Google内部推广使用的可行性实验,虽然最后没有选择 Subversion,但正是 Go 真正首次 commit提交到了 SVN 服务器。
Perforce
2008 年 7 月,Go 在 Subversion提交了最后一次 commit 。此后转向 Perforce,Go 开源前的大部分开发工作都是在 Perforce 上进行。
下面是 Go 迁移到 Perforce 的首次 commit:
commit 777ee7163bba96f2c9b3dfe135d8ad4ab837c062
Author: Rob Pike <[email protected]>
AuthorDate: Mon Jul 21 16:18:04 2008 -0700
Commit: Rob Pike <[email protected]>
CommitDate: Mon Jul 21 16:18:04 2008 -0700
map delete
SVN=128258
doc/go_lang.txt | 6 ++++++
1 file changed, 6 insertions(+)
commit 05caa7f82030327ccc9ae63a2b0121a029286501
Author: Rob Pike <[email protected]>
AuthorDate: Mon Jul 21 17:10:49 2008 -0700
Commit: Rob Pike <[email protected]>
CommitDate: Mon Jul 21 17:10:49 2008 -0700
help management of empty pkg and lib directories in perforce
R=gri
DELTA=4 (4 added, 0 deleted, 0 changed)
OCL=13328
CL=13328
lib/place-holder | 2 ++
pkg/place-holder | 2 ++
src/cmd/gc/mksys.bash | 0
3 files changed, 4 insertions(+)
在转向到 Perforce 后,引入了DELTA=, OCL= 和 CL= 这些标签。并且许多其他变更具有相同的OCL=和CL=,因为它们是在单个Perforce命令中创建和提交的,没有经过审核。
commit c1f5eda7a2465dae196d1fa10baf6bfa9253808a
Author: Rob Pike <[email protected]>
AuthorDate: Mon Jul 21 18:06:39 2008 -0700
Commit: Rob Pike <[email protected]>
CommitDate: Mon Jul 21 18:06:39 2008 -0700
change date
OCL=13331
CL=13331
doc/go_lang.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Mercurial
2009 年 10 月,Go 的版本控制系统迁移到Mercurial,作为11月开源Go准备工作的一部分。
commit 942d6590d9005f89e971ed5af0374439a264a20e
Author: Kai Backman <[email protected]>
AuthorDate: Fri Oct 23 11:03:16 2009 -0700
Commit: Kai Backman <[email protected]>
CommitDate: Fri Oct 23 11:03:16 2009 -0700
one more argsize fix. we were copying with the correct
alignment but not enough (duh).
R=rsc
APPROVED=rsc
DELTA=16 (13 added, 0 deleted, 3 changed)
OCL=36020
CL=36024
src/cmd/5g/ggen.c | 2 +-
test/arm-pass.txt | 17 +++++++++++++++--
2 files changed, 16 insertions(+), 3 deletions(-)
commit b74fd8ecb17c1959bbf2dbba6ccb8bae6bfabeb8
Author: Kai Backman <[email protected]>
AuthorDate: Fri Oct 23 12:43:01 2009 -0700
Commit: Kai Backman <[email protected]>
CommitDate: Fri Oct 23 12:43:01 2009 -0700
fix build issue cause by transition to hg
R=rsc
http://go/go-review/1013012
src/make-arm.bash | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Git
从 2009 年 11 月一直到 2014 年末,由于 Google Code Project Hosting 即将关闭,Go 不得已寻找新的代码托管方案。在研究了几个选项后,最终选择使用 Gerrit Code Review, rsc 认为这是 一个非常棒的选择。
commit 94151eb2799809ece7e44ce3212aa3cbb9520849
Author: Russ Cox <[email protected]>
AuthorDate: Fri Dec 5 21:33:07 2014 -0500
Commit: Russ Cox <[email protected]>
CommitDate: Fri Dec 5 21:33:07 2014 -0500
encoding/xml: remove SyntaxError.Byte
It is unused. It was introduced in the CL that added InputOffset.
I suspect it was an editing mistake.
LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/182580043
src/encoding/xml/xml.go | 1 -
1 file changed, 1 deletion(-)
commit 258f53dee33b9055ea168cb186f8c076edee5905
Author: David Symonds <[email protected]>
AuthorDate: Mon Dec 8 13:50:49 2014 +1100
Commit: David Symonds <[email protected]>
CommitDate: Mon Dec 8 13:50:49 2014 +1100
remove .hgtags.
.hgtags | 140 ----------------------------------------------------------------
1 file changed, 140 deletions(-)
commit 369873c6e5d00314ae30276363f58e5af11b149c
Author: David Symonds <[email protected]>
AuthorDate: Mon Dec 8 13:50:49 2014 +1100
Commit: David Symonds <[email protected]>
CommitDate: Mon Dec 8 13:50:49 2014 +1100
convert .hgignore to .gitignore.
.hgignore => .gitignore | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
commit f33fc0eb95be84f0a688a62e25361a117e5b995b
Author: David Symonds <[email protected]>
AuthorDate: Mon Dec 8 13:53:11 2014 +1100
Commit: David Symonds <[email protected]>
CommitDate: Mon Dec 8 13:53:11 2014 +1100
cmd/dist: convert dist from Hg to Git.
src/cmd/dist/build.c | 100 ++++++++++++++++++++++++++++++---------------------
1 file changed, 59 insertions(+), 41 deletions(-)
commit 26399948e3402d3512cb14fe5901afaef54482fa
Author: David Symonds <[email protected]>
AuthorDate: Mon Dec 8 11:39:11 2014 +1100
Commit: David Symonds <[email protected]>
CommitDate: Mon Dec 8 04:42:22 2014 +0000
add bin/ to .gitignore.
Change-Id: I5c788d324e56ca88366fb54b67240cebf5dced2c
Reviewed-on: https://go-review.googlesource.com/1171
Reviewed-by: Andrew Gerrand <[email protected]>
.gitignore | 1 +
1 file changed, 1 insertion(+)
许多人认为 Go 托管在 GitHub 上,但 GitHub 只是问题跟踪器的主要来源:源代码的官方主要副本位于 go.googlesource.com。
至此,这就是Go转向第五个版本控制系统前的故事。