Write yourself a Git!

1 引言

原文地址为https://wyag.thb.lt/

本文试图从最基础的层面开始,从下至上解释Git版本控制系统。这听起来并不容易,并且已经有多次尝试,成功与否存疑。但是有一种简单的方式:理解Git的内部原理只需要从头开始重新实现Git。
别跑。

这并不是一个玩笑,而且真的并不复杂:如果你从头到尾阅读本文并编写代码(或者只是克隆仓库 - 但你真的应该自己编写代码),你将得到一个名为wyag的程序,它将实现Git的所有基本功能:init、add、rm、status、commit、log…以一种与Git本身完全兼容的方式。本文的最后一次提交实际上是使用wyag创建的,而不是git。而且所有这些只需563行非常简单的Python代码。

但是Git不是太复杂了吗?我认为Git的复杂性是一个误解。的确,Git是一个功能很多的大型程序。但是该程序的核心实际上非常简单,它的复杂性主要源于它经常令人费解(而Git是个大杂烩博客文章可能对此没有帮助)。但是也许最令人困惑的是Git核心模型的极端简单和强大。核心的简单性和强大的应用结合在一起,往往使得事物非常难以理解,因为从基本抽象的本质简单性中推导出各种应用所需的思维跳跃(幽灵变量,有人要来吗?)。

实现Git将展示其纯粹的基本原理。

可以期待什么?本文将详细实现并解释(如果有任何不清楚的地方,请反馈!)Git核心命令的一个非常简化版本。我将保持代码简单而直接,因此wyag不会接近真正的git命令行的强大功能 - 但是缺少的部分将是显而易见的,任何想尝试的人都可以轻松实现。“将wyag升级为一个功能齐全的git库和CLI是留给读者作为练习的”,就像他们所说的那样。

更具体地说,我们将实现以下内容:

  • add() git手册页面
  • cat-file(wyag源代码) git手册页面
  • checkout(wyag源代码) git手册页面
  • commit() git手册页面
  • hash-object(wyag源代码) git手册页面
  • init(wyag源代码) git手册页面
  • log(wyag源代码) git手册页面
  • ls-files(wyag源代码) git手册页面
  • ls-tree() git手册页面
  • merge() git手册页面
  • rebase() git手册页面
  • rev-parse() git手册页面
  • rm() git手册页面
  • show-ref() git手册页面
  • tag(wyag源代码) git手册页面

在阅读本文时,你不需要掌握太多知识:只需要一些基本的Git知识(显然),一些基本的Python知识,以及一些基本的Shell知识。

首先,我只会假设你对最基本的git命令有一定的了解 - 不需要专家级水平,但如果你从未使用过init、add、rm、commit或checkout,你可能会迷失方向。

在语言上,wyag将使用Python实现。同样,我不会使用太高级的东西,而且Python看起来像伪代码,所以很容易理解(讽刺的是,最复杂的部分可能是命令行参数解析逻辑,但你不需要理解那部分)。然而,如果你懂编程但从未接触过Python,我建议你在互联网上找一个速成课程,以便熟悉这门语言。

wyag和git都是终端程序。我假设你熟悉Unix终端的使用方式。再次强调,你不需要成为一个黑客,但cd、ls、rm、tree等命令应该是你工具箱中的一部分。

title: 警告
# Windows用户请注意
wyag应该可以在任何带有Python解释器的类Unix系统上运行,但我完全不知道它在Windows上的表现如何。测试套件绝对需要一个兼容bash的Shell,我假设WSL可以提供。另外,如果你使用WSL,请确保你的`wyag`文件使用Unix风格的换行符(如果你使用VS Code,请参考这个StackOverflow解决方案)。希望能得到Windows用户的反馈!
title: 注意
# 致谢
本文得到了多个人的重要贡献,我对他们都表示感谢。特别感谢:

Github用户tammoippen,他首次起草了我简单地...忘记编写的tag_create函数(那是#9)。 Github用户hjlarry在#22中修复了多个问题。 GitHub用户cutebbb在#27中实现了ls-files的第一个版本,并通过这样做,终于将wyag引入到了暂存区的奇迹中!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值