lab0_report

lab0_report

Charles Lv7

lab0_report

lab_thinkings

Thinking 0.1

question

思考下列有关 Git 的问题:

  • /home/21xxxxxx/learnGit(已初始化)目录下创建一个名为 README.txt的文件。执行命令 git status > Untracked.txt

  • README.txt 文件中添加任意文件内容,然后使用 add 命令,再执行命令git status > Stage.txt

  • 提交 README.txt,并在提交说明里写入自己的学号。

  • 执行命令 cat Untracked.txtcat Stage.txt,对比两次运行的结果,体会 README.txt 两次所处位置的不同。

  • 修改 README.txt 文件,再执行命令 git status > Modified.txt

  • 执行命令 cat Modified.txt,观察其结果和第一次执行 add 命令之前的 status 是否一样,并思考原因。

answer

这两次命令前后status是不一样的。

在第一次add之前status是处于未跟踪状态(Untracked files),而在add后再次修改文件后,此时由于暂存区和工作区均存在Readme.txt这个文件,因此此文件会显示已被修改但工作区和暂存区的文件内容不同,即Changes not staged for commit,而不是显示为未跟踪状态。

Thinking 0.2

question

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

image-20230302152705995

answer

首先对于任何一个文件, 在 Git 中都只有四种状态: 未跟踪(untracked)、未修改(unmodified)、已修改(modified)、已暂存(staged).

状态 解释
未跟踪 表示没有跟踪(add)某个文件的变化,使用 git add 即可跟踪文件。
未修改 表示某文件在跟踪后一直没有改动过或者改动已经被提交。
已修改 表示修改了某个文件, 但还没有加入(add)到暂存区中。
已暂存 表示把已修改的文件放在下次提交(commit)时要保存的清单中。

所以从上面的解释不难看出add the file 对应的是git addgit commitstage the file就是对应了git add,表示把在版本库中有备份的,且已被修改的文件加入暂存区。commit对应的是git commit表示的是将暂存区中的文件加入本地版本库。

Thinking 0.3

question

思考下列问题:

  1. 代码文件 print.c 被错误删除时,应当使用什么命令将其恢复?
  2. 代码文件 print.c 被错误删除后,执行了 git rm print.c 命令,此时应当使用什么命令将其恢复?
  3. 无关文件 hello.txt 已经被添加到暂存区时,如何在不删除此文件的前提下将其移出暂存区?
answer
  1. 可以采用git reset -- print.c指令来还原当前HEAD的已经删除的print.c文件。

  2. 使用git rm print.c命令等效为删除了暂存区的print.c文件,所以首先需要使用git reset --hard HEAD print.c指令将文件从暂存区恢复,之后重复问题1中的git reset -- print.c指令即可。

  3. 使用git rm --cached hello.txt命令来时hello.txt处于未跟踪状态,即可在不删除此文件的情况下将其移出暂存区。

Thinking 0.4

question

思考下列有关 Git 的问题:

  • 找到在/home/21xxxxxx/learnGit 下刚刚创建的 README.txt 文件,若不存在则新建该文件。
  • 在文件里加入 Testing 1git addgit commit,提交说明记为 1。
  • 模仿上述做法,把 1 分别改为 2 和 3,再提交两次。
  • 使用 git log 命令查看提交日志,看是否已经有三次提交,记下提交说明为3 的哈希值a
  • 进行版本回退。执行命令 git reset --hard HEAD^后,再执行git log,观察其变化。
  • 找到提交说明为 1 的哈希值,执行命令 git reset --hard <hash>后,再执行 git log,观察其变化。
  • 现在已经回到了旧版本,为了再次回到新版本,执行 git reset --hard <hash>,再执行 git log,观察其变化。
answer
新文件创建

image-20230302163327053

版本回退

使用git reset可以进行版本回退或者切换到任何一个版本。它有两种用法:第一种是使用 HEAD 类似形式,如果想退回上个版本就用 HEAD^,上上个版本的话就用HEAD^^,要是回退到前 50 个版本则可使用 HEAD~50 来代替;第二种就是使用 hash 值,使用 hash 值可以在不同版本之间任意切换。

image-20230302163444154

git reset --hard实际上是用来改变当前的仓库状态,使用该指令,我们可以将当前仓库的状态变为以前任一次commit后的状态

Thinking 0.5

question

执行如下命令, 并查看结果

  • echo first
  • echo second > output.txt
  • echo third > output.txt
  • echo forth >> output.txt
answer

命令执行结果如下所示:

image-20230302163958907

  • >,表示覆盖输出
  • >>,表示追加输出

Thinking 0.6

question

使用你知道的方法(包括重定向)创建下图内容的文件(文件命名为 test),将创建该文件的命令序列保存在 command 文件中,并将 test 文件作为批处理文件运行,将运行结果输出至 result 文件中。给出 command 文件和 result 文件的内容,并对最后的结果进行解释说明(可以从 test 文件的内容入手). 具体实现的过程中思考下列问题: echo echo Shell Start 与 echo echo Shell Start效果是否有区别; echo echo$c>file1 与 echo echo $c>file1效果是否有区别.

image-20230302164806526

answer
文件部分

image-20230302165723499

脚本部分

image-20230302165806296

result文件结果S

我们在test中先将a和b分别赋值为1和2,然后令c等于a与b的和,即c的结果为.我们将c,b,a的值分别写入file1file2file3,此时这三个文件中的值分别为3, 2, 1。然后我们使用cat将这三个文件的值 追加 写入file4,再把file4中的内容写入result。因此result中的值为3, 2, 1。

image-20230302170342680

结果分析

实验表明,echo echo Shell Startecho 'echo Shell Start' 效果是没有区别的; echo echo $c>file1echo ‘echo $c>file1’ 效果是有区别的,前者会将"echo c"重定向到file1,而后者会将"echo c"重定向到file1,而后者会将"echo $c>file"这一字符串在终端中显示。

lab_difficulties

对我而言,我觉得lab0最难理解的部分其实是gcc的相关知识吧(虽然实际上是pre中的内容,但lab0中疯狂使用),记得lab0的第四题花去了我上机的大半时间,所以这部分我想简要总结一下gcc使用的这部分知识点。

img

这是一个简要的流程图,对 C 而言,从源代码到可执行文件要经过四个步骤:预处理->编译->汇编->链接。这个完整的过程有时被直接称为“编译”或“构建”。

这部分在教程中已经讲的很详细了,在此补充一个教程没有但lab0考了的一个参数-I,-I(注意是i的大写)指令用于指定头文件的路径,从而可以解决头文件(.h)和源文件(.c)不在同一目录下这种情况,常用于Makefile中,如:

1
gcc -c src.c -I ./include -o src.o

除此之外,还有两个非常像的参数(不知道有没有用orz),-L-l(小写的l),-I是用来告诉gcc去哪里找头文件的, 那么-L实际上也很类似, 它是用来告诉gcc去哪里找库文件,而-l的作用就是用来指定具体的静态库、动态库。

lab_summary

感谢我没有浪费的寒假,基本lab0的东西都从某些途径学过orz,在此放放我的linux部分的学习笔记Tag: linux - Charles’s Castle

lab0实验分为linux的基本使用、git的相关操作,和一些shell脚本的知识,除此之外我还了解到了一些关于gcc的更深层次了解的内容,还是受益匪浅的。下面是一张白嫖学长的总结的图,真的厉害:

img

总体来说,lab0算是小试牛刀的内容吧,我反正只用上机那两个小时就写完课下了,实验任务并不大,也学到了不少新东西,收获满满,期待下周的lab1!!

  • Title: lab0_report
  • Author: Charles
  • Created at : 2023-03-02 18:21:17
  • Updated at : 2023-11-05 21:36:18
  • Link: https://charles2530.github.io/2023/03/02/lab0-report/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments