简明注解

Git 特有的分布式架构看起来非常酷,但是,与其它版本管理系统相比,Git 用户的实际体验却要复杂许多。对于初级程序员来说,学习 TFSSubversion 大约只需二十分钟的时间,然而,仅仅学习使用 Git 基本功能就需要花费更多的时间和精力。当你使用 Git 时,很容易陷入某种错误,要想修复这类问题,往往需要了解一些貌似晦涩的命令才行。除非你是一名 Git 专家,否则在有些情况下,为了更快地解决问题,把一个项目直接删除,然后从新做一遍,反而是更容易的解决方法。

Git 具备一些其它版本管理系统没有的功能。(我对此也不是特别清楚,坦白地说,当有人提及这个问题时,通常的反馈都会与架构设计相关。)一般来说,那些 Git 专家之所以喜欢 Git,是因为它的功能比其它的版本管理系统更为强大,但是,这些专家中的一些人常常忽视了 Git 陡峭的学习曲线。很多人(包括我和漫画中的蛋头先生)只是知道这个架构很棒,但是在具体如何使用 Git 上,并不是专家。

因此,这幅漫画就是一个颇具讽刺意味的笑话。在那些整天谈论 Git 与绝大多数实际使用 Git 的用户之间,始终存在着一种冲突或矛盾。这幅漫画的幽默之处恰好在于,终于有人说出了很多人想说,但又不敢在公开场合说的话(担心招致其他人嘲笑),实际上,这幅漫画道出了很多 Git 用户的心声。

Git - XKCD 漫画 #1597

情景对话

蛋头先生正指向桌上一台计算机,马尾辫女士和多发男子就站在其座椅后面。

蛋头先生:这就是 Git。它通过一种优雅的分布式图论树状模型,帮助我们跟踪项目协作。

马尾辫女士:酷毙了,我们应该怎样使用它呢?

蛋头先生:不知道。你只需记住这些命令,然后用它们将代码同步起来就可以了。如果万一出现了错误,把你现有的代码保存在 Git 之外的任何其它地方,然后删除这个项目,再然后,下载一个新代码副本即可。

标题文字

如果还是不能修复这个问题的话,在一个名叫 git.txt 的文件里,有一个我朋友的电话号码,他对 Git 非常了解。你只需经历若干分钟『这真是太简单了,你只需把分支想象为...』这样的对话,而且,最终你一定能学会那些几乎可以修复所有问题的命令。

另一个更加详尽且略带『偏见』的注解

这幅漫画就像一场戏剧表演,描述了那些对 Git - 当今最流行的版本管理系统 - 内在机理缺乏了解的人,如何在实际工作中错误地使用 Git 的场景。Git 之所以变成了笑料,就是因为它的广泛使用度,以及外在的复杂性与内在设计的简单性之间的巨大差异导致。在很多 Git 教程和文章里,作者一般都会采用简单的例子,因此只需使用少许基本命令即可完成任务。这种现象误导了潜在用户,他们以为,想要有效地使用 Git,根本无需额外的研究和学习。

正是由于这个原因,外加 Git 命令在名称上与其它版本管理系统看起来相似,实则完全不同的差异,引发了许多用户(包括漫画中的蛋头先生)对 Git 的应用从来没有超越基本命令的范围。与此同时,为了解决问题,他们宁愿采取将代码保存在 Git 之外,下载一个新的副本,或者,在新代码副本之上,重来做一遍,而不愿意尝试理解和使用 Git 中的诸多功能,从而真正简化他们的工作和任务。

每当应用复杂性增加时,例如:一名开发者修改了另一名开发者已经修过的代码,或者,因为对一个错误行为的一次错误撤销,这种行为很容易破坏一个代码库。为了克服这类问题,蛋头先生建议马尾辫女士,在 Git 之外另存一个代码副本,当然,这种行为本身,就在一定程度上破坏了使用代码版本管理系统的初衷。

在这种情景下,git.txt 是指一个这个开发团队将一个文件保存在代码仓库中,这个就像 readme 一样的文件,其实就是一个简单的文本文件。通常情况下,这种类型的文件主要用于提供帮助信息,如创建数据库,或者处理不常出现的一些特殊情况。此处提及这个文件,实际上隐含了一种讽刺,因为每一位开发者都应该很好地理解和使用 Git,它是程序员日常工作中的基本工具之一。而且,你必须先学会使用 Git,才可能得到和阅读这个文件。

将某个人的电话号码放入这样一个文件中,简直滑稽可笑,因为:

  • 软件开发团队一般都会使用互联网沟通的方式,
  • 通过电话给团队成员解释 Git 完全没有必要,因为基于互联网的在线帮助非常方便快捷,而且
  • 在这种情景下,一旦有很多团队成员通过电话方式寻求帮助的话,那么,对于在这个文件中留电话的那位仁兄来说,将会构成很大程度的骚扰。

Git 最早由 Linus Torvalds 设计实现,当然,他就是那个创建 Linux 的家伙。

简而言之,程序员使用版本管理系统主要是为了跟踪代码变化。大多数版本管理系统都非常相似,如果你了解了其中的一种,学习另一种就会变得非常容易。Git 这个版本管理系统,由于采用了完全不同的设计理念和原则,致使绝大多数的程序员发觉,要想更好地理解 Git 非常困难(尽管 Git 提供了非常多且非常有用的功能与特性)。蛋头先生好像就是其中的一员。

XKCD 漫画 Git Commit 也对 Git 进行了相应的描述。


作者:Randall Munroe,专业漫画家,前美国宇航局工程师,生活在美国麻省萨默维尔。

原文: XKCD Explain 1597:Git

感谢:Qingniu 帮助审阅并完成校对。