summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <eltrac@vmi3030963.contaboserver.net>2026-02-10 00:29:54 +0800
committerEltrac <eltrac@vmi3030963.contaboserver.net>2026-02-10 00:29:54 +0800
commit8e177780ae4dde6cc0056bbc135dc8fb63e1536c (patch)
tree81ea886a1dafdafcc39040b861f69674069d0f42
parent64222f68d3b12e7d9aa97d52a75c8c1b890d2119 (diff)
parent346e646d70923a097e8ed8c6160d5c08d62fec79 (diff)
Merge branch 'master' of https://src.eltr.ac/eltrac/geedeapro
-rw-r--r--content/essays/git-with-trolley.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/content/essays/git-with-trolley.md b/content/essays/git-with-trolley.md
new file mode 100644
index 00000000..1434b458
--- /dev/null
+++ b/content/essays/git-with-trolley.md
@@ -0,0 +1,21 @@
++++
+title = '如何用电车难题理解 Git'
+subtitle = ''
+slug = 'git-with-trolley'
+tags = []
+categories = ''
+date = 2026-02-10T00:13:52+08:00
+draft = true
+toc = true
++++
+
+你是一个疯狂的哲学家,你意识到反思、设想和解构已经无法满足你对人类道德的求知欲了,于是你决定开始实验。就这样,你找到了一些铁轨、一辆火车、一根拉杆和一些必要的机关,哦对,还有绳子,现在就差受害者了。<!--more-->
+
+不过,你可不想过于随意地进行这场伟大的实验,有幸参与实验的人也是需要层层筛选的。总而言之,你找到了一群愿意或不愿意的受试者,让我们把他们称作 A 组。尽管你在选取受试者时也是带有目的的,但在正式开始实验之前,理应再做一次筛选。于是,你把 A 组中的一部分人绑上了铁轨,让另一部分人直接离开了,我们把这一部分有幸被绑上铁轨的人称作 B 组。
+
+读者可能猜到了,一开始进入这场思想实验的 A 组就是 Git 的工作目录(work tree),B 组自然代表从工作目录中挑选出来的布置区(staging area),那些被哲学家打发走的人就是被丢弃(discard)或者说复原(restore)的工作。由此就不难理解,当哲学家命令火车向前行驶,压过铁轨(staging area)上被绑好的人们之后,他就承认(commit)了这些人应当进入实验中,也犯下(commit)了杀人罪,或者,我们可以说:他提交(commit)了他的工作。
+
+显然,在这篇文章中,我们把对代码的改动抽象为「工作」,而在电车难题的比喻中,我们用人来代指「工作」。
+
+
+