Git 的 20 年。仍然很奇怪,仍然很美妙。

二十年前的今天,Linus Torvalds 向 Git(信息管理工具)提交了第一个版本。在过去的 20 年里,Git 从一个小型、简单的个人项目发展成为有史以来最占主导地位的版本控制系统。

一、Git 的起源

  • 背景:Linux 内核开发社区对当时的版本控制和协作工具感到沮丧,主要通过邮件列表进行协作,流程是发布项目的 tarball(类似压缩文件),人们下载并在本地修改,用 GNU diff 生成补丁,通过邮件列表讨论并应用,重复此过程。但当时的版本控制系统功能不足,如访问控制机制笨拙、不分布式、速度慢等。
  • Bitkeeper:为满足内核的使用案例,开发了 Bitkeeper 工具,但因其许可证问题不被社区接受。
  • 目的:Git 的创建主要是为了更好地处理补丁和 tarballs,设计数据结构(文件树的链表、内容可寻址的 blob 存储),从一开始到现在基本未变。

二、第一个提交

  • 内容:是七个简单的独立工具,如write-treecommit-tree等,后来都以git-为前缀,一些工具演变成至今仍存在的底层命令,如git cat-filegit write-tree等,从一开始 Git 就能通过update-cache构建内容缓存、write-tree写入数据库对象作为“快照”、commit-tree写入“变更集”并设置历史记录等。Linus 最初只想构建这个底层工具,作为一些用户界面(“瓷器”)的后端。

三、与 Git 的初次接触

  • 作者:作者本人是通过朋友 Nick Hengeveld 在 Reactrix 初创公司接触到 Git 的。
  • 使用方式:他们将 Git 用作分布式内容跟踪器,而非通常认为的版本控制系统,用于管理数字标牌的广告资产,通过脚本根据机器需求生成唯一的树并提交到分支,机器每晚获取并硬检出,这种方式有很多优点,如增量更新、内容可寻址等,Nick 对早期 Git 项目有很多贡献。

四、Git 的发展历程

  • 命令演变:Git 命令从一开始非常底层,难以识别,随着时间推移,“瓷器”命令慢慢融入核心代码,早期有git-pasky等用户界面脚本,后来逐渐统一,2007 年Cogito被放弃,现在几乎所有命令都用 C 重写。
  • 一些“第一”:如第一个git log是一个简单的包装脚本,第一个git rebase是从 Junio 和 Linus 的对话中诞生的,“octopus”一词也在 Git 邮件列表中出现,后来成为 Git 的合并策略之一,GitHub 的“Octocat”也由此而来。

五、Git 的未来
二十年后,作者仍以类似最初的方式使用 Git,GitButler 用 Git 跟踪项目历史,Git 依然是一个很好的“愚蠢内容跟踪器”。

阅读 6
0 条评论