本文内容來自MIT_6.031_sp18: Software Construction課程的Readings部分,采用CC BY-SA 4.0協定。
由于我們學校(哈工大)大二軟體構造課程的大部分素材取自此,也是推薦的閱讀材料之一,于是打算做一些翻譯工作,自己學習的同時也能幫到一些懶得看英文的朋友。另外,該課程的閱讀資料中有許多練習題,但是沒有标準答案,所給出的答案均為譯者所寫,有錯誤的地方還請指出。
譯者:李秋豪
審校:
V1.0 Mon Mar 12 22:44:59 CST 2018
譯者注:我覺得網上的這篇教程Git教程 - 廖雪峰 更清楚詳細的表達出了版本控制的緣由及對應操作,同時也非常簡練,推薦大家看這個。是以這篇閱讀資料隻翻譯了一個
git show
指令,完整的版本請參考05: Version Control
......(省略)
為什麼送出(commits)看起來像 diffs
?
diffs
我們之前将一次送出定義為對整個工程的一次快照,但是如果你問Git,它傳回的結果好像不是這樣:
$ git show 1255f4e
commit 1255f4e4a5836501c022deb337fda3f8800b02e4
Author: Max Goldman <[email protected]>
Date: Mon Sep 14 14:58:40 2015 -0400
Change the greeting
diff --git a/hello.txt b/hello.txt
index c1106ab..3462165 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello, version control!
+Hello again, version control!
Git覺得我們送出的項目中大多數内容是沒變的,于是它隻會顯示出改變的内容。實際上,這也和Git的存儲方式相同——它隻會存儲改變後的檔案,每次送出中沒變的檔案都會指向之前送出中的檔案:(還記得之前提到過的值不能改變的對象(immutable object)嗎?)

但是我們可以要求Git顯示出指定送出中所有的檔案:
$ git show 3e62e60:
tree 3e62e60:
hello.rb
hello.scm
hello.txt
看,僅僅一個分号就改變了整個輸出。
我們更可以指定一個特定送出中的特定檔案的内容:
$ git show 3e62e60:hello.scm
(display "Hello, version control!")
這也是恢複檔案的一種方法:使用
git show
顯示出你上次送出的時候檔案的内容。
譯者注:
diff
指令的操作和閱讀可以參考diff詳解,讀懂diff結果 和 diff指令