Go的版本控制历史记录

2022-02-15 20:48:35

一个月前,我创建了对象文件解析包,比如debug/macho,作为每个包的测试数据,我签入了一个从一个微不足道的“hello,world”程序编译的对象文件,以及它们的源代码:commit BF69025825FD2B8E7AAC01F27D5C974BD30AF542 author:Russ Cox<;[email protected]>;作者:Fri Sep 18 11:49:22 2009-0700提交:Russ Cox<;[email protected]>;提交日期:2009年9月18日星期五11:49:22-0700 Mach-O文件读取R=R DELTA=784(添加784,删除0,更改0)OCL=34715 CL=34788 src/pkg/debug/macho/Makefile | 12+src/pkg/debug/macho/file。进行| 374++++++++++++++++src/pkg/debug/macho/file_测试。去| 159+src/pkg/debug/macho/macho。go | 230+src/pkg/debug/macho/testdata/gcc-386-darwin-exec | Bin 0->;12588字节src/pkg/debug/macho/testdata/gcc-amd64-darwin-exec | Bin 0->;8512字节/macho/testdata/gcc-amd64-darwin-exec-debug | Bin 0->;4540字节7个文件更改775个插入(+)

这是最初引入src/pkg/debug/macho/testdata/hello的提交。c、 当然。当我在文件中添加版权声明时,在hello中添加版权声明似乎是错误的。c文件。相反,由于我将回购协议拆分为每个提交表单的补丁文件,所以很容易创建一些至少显示该程序真实历史一部分的假提交,作为仔细查看的人的复活节彩蛋:提交7D7C6A97F815E9279D08CFAEA7D5EFB5E90695A8作者:布莱恩·克尼根<;bwk>;作者日期:周二7月18日19:05:45 1972-0500社区:布莱恩·克尼根<;bwk>;提交日期:1972年7月18日星期二19:05:45-0500您好,world R=ken DELTA=7(添加7个,删除0个,更改0个)src/pkg/debug/macho/testdata/hello。b | 7+1文件更改,7次插入(+)提交0BB0B61D6A85B2A1A33DCBC418089656F2754D32作者:布莱恩·克尼根<;bwk>;作者:Sun Jan 20 01:02:03 1974-0400社区:Brian Kernighan<;bwk>;提交日期:Sun Jan 20 01:02:03 1974-0400转换为C R=dmr DELTA=6(0添加,3删除,3更改)src/pkg/debug/macho/testdata/hello。b | 7------src/pkg/debug/macho/testdata/hello。c | 3+++2个文件更改,3个插入(+),7个删除(-)提交0744ac969119db8a0ad3253951d375eb77cfce9eAuthor:Brian Kernighan<;研究bwk>;作者:Fri Apr 1 02:02:04 1988-0500社区:Brian Kernighan<;研究bwk>;提交日期:1988年4月1日星期五02:02:04-0500转换为拟议的ANSI C R=dmr DELTA=5草案(增加2个,删除0个,更改3个)src/pkg/debug/macho/testdata/hello。c | 7++--1个文件更改,5个插入(+),2个删除(-)提交D82B11E4A46307F1415024F33263E819C222B8作者:Brian Kernighan<;[email protected]>;作者:Fri Apr 1 02:03:04 1988-0500社区:Brian Kernighan<;[email protected]>;提交日期:1988年4月1日星期五02:03:04-0500最后一刻修复:转换为ANSI C R=dmr DELTA=3(添加2个,删除0个,更改1个)src/pkg/debug/macho/testdata/hello。c | 4++-1个文件更改,3个插入(+),1个删除(-)

1972年7月的提交展示了第一个“hello,world”程序,它是从Brian Kernighan的“语言B教程介绍”中复制而来的:main(){extrn A,B,c;putchar(A);putchar(B);putchar(c);putchar('!*n');}“地狱”;b'o,w';c‘世界’;

各种网上来源称这是一本“书”,但它绝对不是。这是一份17页的印刷文件,后来被作为1973年1月《贝尔实验室计算科学技术报告#8:编程语言B》的一半收录(甚至还没有接近一本书!)。“hello,world”节目出现在第7节中,前面是不那么吸引人的“hi!”第6节中的程序。当我在2022年写这篇博文时,我找不到任何关于B教程最初日期为1972年7月的在线参考资料,但我相信我一定有一个很好的理由。1974年1月的委员会将该程序转换为C语言,如克尼汉的《C语言编程教程》所述。链接的PDF是丹尼斯·里奇(Dennis Ritchie)重新打印的副本,没有日期,但里奇(Ritchie)1974年1月15日的《C参考手册》技术备忘录将克尼根(Kernighan)的教程称为“未出版的内部备忘录,贝尔实验室,1974年”,这意味着该教程也必须在1月份编写。C程序比我们现在使用的程序短,但比B程序好得多:我跳过了C编程语言第一版中的演示,这看起来像是:1988年4月的委员会展示了C编程语言第二版的“拟议的ANSI C草案”版本的程序:1988年4月的第二委员会展示了我们今天知道的最终完整的ANSI C版本:维基百科说第二版于1988年4月出版。我没有时间,但4月1日似乎很合适。我没有时间做这两件事,所以我用02:03:04做第二件事,所以用02:02:04做第一件事。提交中的电子邮件地址也适用于句点,尽管Mondrian的R=和DELTA=标记显然不适用:当时没有代码审查!值得一提的是,我从许多人那里听说,与其他项目相比,1972年的日期打破了他们在移动存储库中所做的各种演示和分析。哎呀!抱歉。(我还听说有人在分析Mercurialrepos的“branchiness”,并决定将Gorepo用作一个大型测试用例。他们的程序在调试他们的程序时说它的branchiness为0,他们花费了一段时间,然后才意识到,由于我们的“重设基础和合并”政策,repo实际上是完全线性的。)我们在2009年11月10日发布了谷歌代码Mercurial回购协议,为了纪念这一时刻,我们又添加了一个复活节彩蛋。Brian Kernighan和Rob Pike在1984年出版的《Unix编程环境》一书中的一个脚注写道:Ken Thompson曾被问及如果重新设计系统,他会做什么不同的事情。他的回答是:“我会用e拼写create。”

这是指creat(2)系统调用和O_creat file open标志。发布后,Ken立即给我发了一封修改邮件,修复了这个错误:commit c90d392ce3d3203e0c32b3f98d1e68c4c2b4c49bAuthor:Ken Thompson<;[email protected]>;作者:2009年11月10日星期二15:05:15-0800社区:肯·汤普森<;[email protected]>;提交日期:2009年11月10日星期二15:05:15-0800用"拼写;e";R=rschttp://go/go-review/1025037src/pkg/os/file。go | 1+1文件更改,1次插入(+)

可悲的是,我们并没有完美地执行这个笑话,因为代码审查进入了我们的内部Rietveld服务器,而不是公共服务器。因此,就在下一次会议上,我们在配置中启用了代码审查服务器。但对于子孙后代来说,这是一篇保留在我的电子邮件中的评论:从2009年11月到2014年底,情况一直如此,当时我们知道谷歌代码项目托管即将关闭,我们需要一个新家。在研究了几个选项之后,我们最终使用了Gerrit Code Review,这是一个非常棒的选择。许多人认为Go托管在GitHub上,但GitHub只是我们的问题追踪器的主版本:源代码的正式主副本正在运行中。谷歌资源。通用域名格式。当R=行结束时,您可以在日志中看到从Mercurial到Git的转换,随后是一些完全未查看的提交,然后由以下人员查看:行开始:提交94151eb2799809ece7e44ce3212aa3cbb9520849Author:Russ Cox<;[email protected]>;作者:Fri Dec 5 21:33:07 2014-0500社区:Russ Cox<;[email protected]>;提交日期:Fri Dec 5 21:33:07 2014-0500 encoding/xml:删除语法错误。字节它是未使用的。它是在CL中引入的,增加了InputOffset。我怀疑这是一个编辑错误。LGTM=bradfitz R=bradfitz CC=golang codereviewshttps://golang.org/cl/182580043src/encoding/xml/xml。go | 1-1个文件更改,1个删除(-)提交258F53Dee33B9055EA168CB186F8C076EDEE5905作者:David Symonds<;[email protected]>;作者:Mon Dec 8 13:50:49 2014+1100Commit:David Symonds<;[email protected]>;提交日期:周一至十二月8日13:50:49 2014+1100移除。hgtags。hgtags | 140--------------------------------------------1个文件更改,140个删除(-)提交369873C6E5D00314AE30276363F58E5AF11B149CAUTOR:David Symonds<;[email protected]>;作者:Mon Dec 8 13:50:49 2014+1100Commit:David Symonds<;[email protected]>;承诺日期:周一至十二月8日13:50:49 2014+1100转换。忽略。吉特忽略。hgignore=>。gitignore | 9+-----1个文件更改,1个插入(+),8个删除(-)提交F33FC0EB95BE84F0A688A62E25361A117E5B995作者:David Symonds<;[email protected]>;作者:Mon Dec 8 13:53:11 2014+1100Commit:David Symonds<;[email protected]>;提交日期:Mon Dec 8 13:53:11 2014+1100 cmd/dist:将dist从Hg转换为Git。src/cmd/dist/build。c | 100++++++++++++++++++++--------------1个文件更改,59个插入(+),41个删除(-)提交26399948E3402D3512 CB14FE5901AFAEF54482FAA作者:David Symonds<;[email protected]>;作者:Mon Dec 8 11:39:11 2014+1100Commit:David Symonds<;[email protected]>;提交日期:周一至十二月8日04:42:22 2014+0000添加bin/to。吉特,别理我。变更Id:I5c788d324e56ca88366fb54b67240cebf5dced2c审核日期:https://go-review.googlesource.com/1171审核人:安德鲁·格兰德<;[email protected]>。gitignore | 1+1文件已更改,1次插入(+)

作为从Mercurial到Git转换的一部分,我们没有在提交体中添加显示旧Mercurial哈希的可见行,但我们在底层Git提交对象中记录了它们。例如:%git cat文件-p 7d7c6a97f815e9279d08cfaea7d5efb5e90695a8tree e06bd601885e16ad3d72c2a8c9b411889b2e478eauthor Brian Kernighan<;bwk>;80352345-0500社区Brian Kernighan<;bwk>;80352345-0500golang hg F6182E5ABF5EB0C762DDBB18F8854B7E350EAEBhello,worldR=kenDELTA=7(增加7个,删除0个,更改0个)%

golang hg行记录原始Mercurial提交哈希。这就是故事的结束,直到我们在未来的某个时候转向第五版本的控制系统。