Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史

简介: Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史

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。

commit18c5b488a3b2e218c0e0cf2a7d4820d9da93a554

Author:     Robert Griesemer <gri@golang.org>

AuthorDate: Sun Mar 220:47:342008 -0800

Commit:     Robert Griesemer <gri@golang.org>

CommitDate: Sun Mar 220:47:342008 -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:

commit777ee7163bba96f2c9b3dfe135d8ad4ab837c062

Author:     Rob Pike <r@golang.org>

AuthorDate: Mon Jul 2116:18:042008 -0700

Commit:     Rob Pike <r@golang.org>

CommitDate: Mon Jul 2116:18:042008 -0700


  map delete


  SVN=128258


doc/go_lang.txt | 6 ++++++

1 file changed, 6 insertions(+)


commit05caa7f82030327ccc9ae63a2b0121a029286501

Author:     Rob Pike <r@golang.org>

AuthorDate: Mon Jul 2117:10:492008 -0700

Commit:     Rob Pike <r@golang.org>

CommitDate: Mon Jul 2117:10:492008 -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 <r@golang.org>

AuthorDate: Mon Jul 2118:06:392008 -0700

Commit:     Rob Pike <r@golang.org>

CommitDate: Mon Jul 2118:06:392008 -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准备工作的一部分。

commit942d6590d9005f89e971ed5af0374439a264a20e

Author:     Kai Backman <kaib@golang.org>

AuthorDate: Fri Oct 2311:03:162009 -0700

Commit:     Kai Backman <kaib@golang.org>

CommitDate: Fri Oct 2311:03:162009 -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 <kaib@golang.org>

AuthorDate: Fri Oct 2312:43:012009 -0700

Commit:     Kai Backman <kaib@golang.org>

CommitDate: Fri Oct 2312:43:012009 -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 <rsc@golang.org>

AuthorDate: Fri Dec521:33:072014-0500

Commit:     Russ Cox <rsc@golang.org>

CommitDate: Fri Dec521:33:072014-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 <dsymonds@golang.org>

AuthorDate: Mon Dec813:50:492014 +1100

Commit:     David Symonds <dsymonds@golang.org>

CommitDate: Mon Dec813:50:492014 +1100


   remove .hgtags.


.hgtags | 140 ----------------------------------------------------------------

1 file changed, 140 deletions(-)


commit 369873c6e5d00314ae30276363f58e5af11b149c

Author:     David Symonds <dsymonds@golang.org>

AuthorDate: Mon Dec813:50:492014 +1100

Commit:     David Symonds <dsymonds@golang.org>

CommitDate: Mon Dec813:50:492014 +1100


   convert .hgignore to .gitignore.


.hgignore => .gitignore | 9 +--------

1 file changed, 1 insertion(+), 8 deletions(-)


commit f33fc0eb95be84f0a688a62e25361a117e5b995b

Author:     David Symonds <dsymonds@golang.org>

AuthorDate: Mon Dec813:53:112014 +1100

Commit:     David Symonds <dsymonds@golang.org>

CommitDate: Mon Dec813:53:112014 +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 <dsymonds@golang.org>

AuthorDate: Mon Dec811:39:112014 +1100

Commit:     David Symonds <dsymonds@golang.org>

CommitDate: Mon Dec804:42:222014 +0000


  add bin/ to .gitignore.


   Change-Id: I5c788d324e56ca88366fb54b67240cebf5dced2c

   Reviewed-on: https://go-review.googlesource.com/1171

   Reviewed-by: Andrew Gerrand <adg@golang.org>


.gitignore | 1 +

1 file changed, 1 insertion(+)

许多人认为 Go 托管在 GitHub 上,但 GitHub 只是问题跟踪器的主要来源:源代码的官方主要副本位于 go.googlesource.com。

至此,这就是Go转向第五个版本控制系统前的故事。

原文链接:https://research.swtch.com/govcs

相关文章
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
407 4
|
6月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
543 0
|
4月前
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
966 4
|
8月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
434 61
|
8月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
9月前
|
人工智能 缓存 安全
Go开发遇见的一次Data Race
本文通过一段 Go 语言代码示例,分析了并发编程中的数据竞争(Data Race)问题。代码实现了一个带缓存的内存存储系统,包含 `LRUCache` 和 `MemoryCache` 两个核心组件。尽管在 `MemoryCache` 的 `Set` 方法中加了锁保护,但由于直接调用 `LRUCache` 的 `GetLength` 方法时未加锁,导致底层数据结构在多 goroutine 环境下被同时读写,从而触发 Data Race。文章详细解析了问题根源,并提出了解决方案:为 `LRUCache` 的 `Add` 方法添加锁保护,确保并发安全。
117 1
|
8月前
|
缓存 安全 Go
Go语言依赖管理与版本控制-《Go语言实战指南》
本章深入探讨Go语言中的依赖管理与版本控制,重点介绍Go Modules的使用方法。内容涵盖依赖管理的重要性、语义化版本控制(SemVer)、查看和管理依赖版本、主版本路径规则、常见操作场景、国内代理加速、依赖安全(go.sum文件)、版本冲突解决及版本锁定与回退等主题。通过学习,读者将掌握如何实现清晰、稳定且可重复构建的项目依赖管理。
|
10月前
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
610 2
|
10月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
204 0
|
开发框架 Go 计算机视觉
纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架
开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C++ 库,如 OpenCV 或 dlib,但通过 cgo 调用 C 程序会引入巨大的延迟,并在性能方面产生显著的权衡。此外,在许多情况下,在各种平台上安装 OpenCV 是很麻烦的。使用纯Go开发的插件不仅在开发时方便,在项目部署和项目维护也能省很多时间精力。
374 5

热门文章

最新文章