天天看點

麻省理工18年春軟體構造課程閱讀05“版本控制”

本文内容來自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

?

我們之前将一次送出定義為對整個工程的一次快照,但是如果你問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)嗎?)

麻省理工18年春軟體構造課程閱讀05“版本控制”

但是我們可以要求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指令