麻省理工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 <maxg@mit.edu>
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命令


......(省略)


posted @ 2018-03-13 22:16  QiuhaoLi  阅读(899)  评论(2编辑  收藏  举报