# lab-0 实验总结

# 思考题

# Thinking 0.1

  • 使用 cat Modified.txt ,观察它和第一次 add 之前的 status 一样吗,思考一 下为什么?

image-20220315210618152

image-20220315210652755

两者显然不同,第一次 add 之前并没有 Stage.txtModified.txt ,因此在 Untracked files 中没有它们

第一次 add 之前, README.txt 在工作区,但不在版本库中,因此显示 Untracked;第二次 README.txt 在版本库中已经有一个版本,但是工作区做了修改,因此显示 modified

# Thinking 0.2

  • 仔细看看这张图,思考一下箭头中的 add the file、stage the file 和 commit 分别对应的是 Git 里的哪些命令呢?

Git中的四种状态转换关系

add the file 对应 git add

stage the file 对应 git add

commit git commit

# Thinking 0.3

  • 深夜,小明在做操作系统实验。困意一阵阵袭来,小明睡倒在了键盘上。等到小明早上醒来的时候,他惊恐地发现,他把一个重要的代码文件 printf.c 删除掉了。苦恼的小明向你求助,你该怎样帮他把代码文件恢复呢?
git checkout -- printf.c
  • 正在小明苦恼的时候,小红主动请缨帮小明解决问题。小红很爽快地在键盘上敲下了 git rm printf.c,这下事情更复杂了,现在你又该如何处理才能弥补小红的过错呢?
git checkout -- printf.c
  • 处理完代码文件,你正打算去找小明说他的文件已经恢复了,但突然发现小明的仓库里有一个叫 Tucao.txt,你好奇地打开一看,发现是吐槽操作系统实验的,且该文件已经被添加到暂存区了,面对这样的情况,你该如何设置才能使 Tucao.txt 在不从工作区删除的情况下不会被 git commit 指令提交到版本库?
git rm --cached Tucao.txt

# Thinking 0.4

完成前三步后,执行 git log 得到

image-20220315214550494

如果 reset 到第一次提交,则 2、3 两次提交记录会消失

这时候可以通过记录提交哈希值的方式 “回到未来”

git 可以快速在版本之间切换,这一点在 OO 课程中已经发挥出其优势

# Thinking 0.5

思考下面四个描述,你觉得哪些正确,哪些错误,请给出你参考的资料或实验证据。

  1. 克隆时所有分支均被克隆,但只有 HEAD 指向的分支被检出。

正确,使用 git branch -a 命令查看,可以看到所有分支,但是本地文件夹会显示只能显示一个 branch 的信息,这个就是当前 HEAD 所指向的 branch

image-20220315214933033

  1. 克隆出的工作区中执行 git log、git status、git checkout、git commit 等操作不会去访问远程版本库。

正确,只有 git push 才会操作远程版本库

  1. 克隆时只有远程版本库 HEAD 指向的分支被克隆。

错误,如上图所示,全部被克隆下来

  1. 克隆后工作区的默认分支处于 master 分支。

错误,应该是 HEAD 指向的分支

# Thinking 0.6

image-20220315215547590

执行结果如上,可以看出区别在于输出到文件还是屏幕,是覆盖文件内容还是追加文件内容

# Thinking 0.7

运行结果如下图

image-20220315221920176

echo Shell Startecho 'Shell Start' 在效果上无区别

echo \$c>file1 表示将变量 c 输出到 file1 中

echo '\$c>file1' 直接将 '' 中的内容输出到屏幕上,即,使用单引号,不转义

# 实验难点

graph LR
命令行的使用,了解Linux基本命令-->熟悉gcc编译命令-->写Makefile-->编写bash脚本

# 体会与感想

我觉得 lab-0 实验是基础,是为以后更好地进行操作系统实验做铺垫,因此要尽快熟悉 Linux 命令行的使用,在这次实验中,我虽然完成了所有作业试,但是自我感觉对一些命令的掌握还不够深刻,我觉得自己还要付出很大的努力去学好这门课程。m