英文原文:Steve Losh - Git Koans

受 Vim Koans 而启发.

沉默

一位 Python 程序员递给 Git 大师她的 ~/.gitconfig 文件。 在那众多行间有着这些代码:

[alias]
; 明确比模糊要好。
; 如果你想合并应该自己做。
pull = pull --ff-only

Git 大师点点头。“git pull origin master”,那位程序员说道。

Git 大师将 master 更新到了最新并自动与那位程序员的修改进行了合并。

“但是 Git 大师,我没有在我的配置文件中声明只能快进么?”她哭诉道。

Git 大师看着她,点点头,什么也没说。

“那么你为什么没有提醒我我的配置文件有问题?”她问道。

Git 大师回应到:“它没有问题。”

几个月后,这名程序员因为一个其他的原因而阅读了 git --help config,茅塞顿开。

把一件事做好

一名 UNIX 程序员正在一个隔间办公室(cubicle farms)里工作。 当她看见 Git 大师走过的时候,她跑过去见他。

“见到您是我的荣幸,Git 大师!”她说道。“我正在学习 UNIX 之道来设计程序使得他们把一件事情做好。我想肯定能从您身上学到很多东西。”

“肯定的”,Git 大师回应道。

“我该如何切换到另一个分支?”那个程序员问道。

“用 git checkout。”

“那么我该如何创建一个分支?”

“用 git checkout。”

“那么我该如何在我的工作目录里更新一个单独的文件的内容,而完全不必操作分支?”

“用 git checkout。”

在得到这三个答案之后,那个程序员幡然醒悟。

只有神灵

一个伟大的历史学家正在试图拆解几个月前出现的一个复杂的错误合并。 他朝拜了 Git 大师并向他寻求帮助。

“Git 大师”,那个历史学家说道,“历史的本质是什么?”

“历史是永恒不变的。之后改写历史是在用一种混杂的存在在进行篡改。”

历史学家点点头并问道:“是不是这就是为什么不鼓励推送衍合的提交?”

“的确”,Git 大师说道。

“精彩绝伦!”历史学家惊叹道。“我有一个有两个祖先的历史合并记录。我怎样才能找到这两个祖先原本在什么分支上?”

“历史是转瞬即逝的”,Git 大师回应道,“你所寻求的答案只有神灵们才能回答。”

历史学家抱住了他的头,就像是启示砸在了他的脑袋上一样。

大地精

一个学徒正在 Git 大师手下学习。 在课程结束的时候他浏览了他的笔记并说道,“大师,我有几个问题。我可以问问么?”

Git 大师点点头。

“我怎么列出所有的标签?”

git tag”,Git 大师回应道。

“我怎么列出所有的远程仓库?”

git remote -v”,Git 大师回应道。

“我怎么列出所有的分支?”

git branch -a”,Git 大师回应道。

“我怎么查看当前分支?”

git rev-parse --abbrev-ref HEAD”,Git 大师回应道。

“我怎么删除一个远程仓库?”

git remote rm”,Git 大师回应道。

“那么我怎么删除一个分支?”

git branch -d”,Git 大师回应道。

学徒思考了一会,然后问道:“这里有很多都能做的更一致,那样的话在写代码的时候就可以更好记了吧?”

Git 大师打了个响指。一个大地精进来活生生吃掉了学徒。 在身后世界中,学徒开悟了。

长与短

Git 大师和一个学徒走在一座桥上。

学徒想要学习 Git 大师广博的知识,说道:“git branch --help”。

Git 大师坐下来给她讲解 git branch 的七种形式和他们可用的选项。

他们继续走。几分钟后他们遇到了一位经验丰富开发者从对面走来。 他向 Git 大师鞠了一躬并问道:“git branch -h”。 Git 大师简洁的告诉了他最常用的分支选项。 开发者感谢了他并继续他的旅程。

“大师”,学徒说道,“命令的长选项与短选项的本质是什么?我以为他们是等价的,但是当那个开发者用 -h 的时候你的回答是跟我问 --help 的时候是不一样的。”

“视角是很重要的”,大师回答道。

学徒迷惑了。她决定测试一下并说道:“git -h branch”。

Git 大师转过去自己跳下了栏杆,把自己摔死在下面的石头上。

看到这个,学徒顿悟了。