答:add the file 对应git add,stage the file 对应git add,commit对应git commit
答:git checkout -- print.c
答:git checkout HEAD print.c
答:git rm --cached hello.txt
3.使用你知道的方法(包括重定向)创建下图内容的文件(文件命名为 test), 将创建该文件的命令序列保存在 command 文件中,并将 test 文件作为批处理文件运行, 将运行结果输出至 result 文件中。给出 command 文件和 result 文件的内容,并对最 后的结果进行解释说明(可以从 test 文件的内容入手). 具体实现的过程中思考下列问 题: echo echo Shell Start 与 echo echo Shell Start
效果是否有区别; echo echo $c>file1 与 echo echo $c>file1
效果是否有区别.
答:command文件内容:
1 echo 'echo Shell Start' > test 2 echo 'echo set a = 1' >> test
3 echo 'a=1' >> test
4 echo 'echo set b = 2' >>test
5 echo 'b=2' >> test
6 echo 'set c = a+b' >> test
7 echo 'c=$[$a+$b]' >> test
8 echo 'echo c=$c' >> test
9 echo 'echo save c to ./file1' >> test
10 echo 'echo $c>file1' >> test
11 echo 'echo save b to ./file2' >> test
12 echo 'echo $b>file2' >> test
13 echo 'echo save a to ./file3' >> test
14 echo 'echo $a>file3' >>test
15 echo 'echo save file1 file2 file3 to file4' >> test
16 echo 'cat file1>file4' >> test
17 echo 'cat file2>>file4' >> test
18 echo 'cat file3>>file4' >> test
19 echo 'echo save file4 to ./result' >> test
20 echo 'cat file4>>result' >> test
result文件内容:
1 3 2 2
3 1
首先command命令生成test文件,而test文件的作用即令a=1,b=2,c=a+b,然后将c、a、b相继输出到file4文件,再将file4输出到result文件中。
echo echo Shell Start 与 echo echo Shell Start
效果没有区别;
echo echo $c>file1 与 echo echo $c>file1
效果有区别,前者将echo $c输出到file1,后者则输出echo $c>file1
结果如下:
1 Untracked.txt 的内容如下
2
3 # On branch master
4 # Untracked files:
5 # (use "git add <file>..." to include in what will be committed)
6 #
7 # README.txt
8 nothing added to commit but untracked files present (use "git add" to track)
9
10 Stage.txt 的内容如下
11
12 # On branch master
13 # Changes to be committed:
14 # (use "git reset HEAD <file>..." to unstage)
15 #
16 # new file: README.txt
17 #
18
19 Modified.txt 的内容如下
20
21 # On branch master
22 # Changes not staged for commit:
23 # (use "git add <file>..." to update what will be committed)
24 # (use "git checkout -- <file>..." to discard changes in working directory)
25 #
26 # modified: README.txt
27 #
28 no changes added to commit (use "git add" and/or "git commit -a")
第一次文件在工作区内处于未跟踪状态,第二次文件处于暂存区中但是未提交,第三次修改后暂存区中文件和工作区中有不同,仍需要使用git add将修改添加到暂存区中,与第一次操作相同。
第一次git log:
commit 1d5ef89017e8bb2f5eb5e9d5ad5c8bd9ca04da82 (HEAD -> master)
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:10:48 2023 +0800
3
commit 896ab3df8673783bd32e313b27a2433e9a430c02
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:10:24 2023 +0800
2
commit 7e8e3b7f1f54574cffc618f6052b9c192259793e
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:09:55 2023 +0800
1
第二次 git log:
commit 896ab3df8673783bd32e313b27a2433e9a430c02 (HEAD -> master)
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:10:24 2023 +0800
2
commit 7e8e3b7f1f54574cffc618f6052b9c192259793e
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:09:55 2023 +0800
1
第三次git log:
commit 7e8e3b7f1f54574cffc618f6052b9c192259793e (HEAD -> master)
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:09:55 2023 +0800
1
第四次git log:
commit 1d5ef89017e8bb2f5eb5e9d5ad5c8bd9ca04da82 (HEAD -> master)
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:10:48 2023 +0800
3
commit 896ab3df8673783bd32e313b27a2433e9a430c02
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:10:24 2023 +0800
2
commit 7e8e3b7f1f54574cffc618f6052b9c192259793e
Author: 黄一轩 <21373347@buaa.edu.cn>
Date: Wed Mar 1 14:09:55 2023 +0800
1
第一次直接将first进行标准输出
第二次将second输出到output.txt,第三次将output.txt改为third,第四次将forth追加到output.txt后面
本次实验带我们了解了Shell、git、gcc等的基本用法,难度相对较小。其中Shell的使用重点在于能够熟练地掌握各类命令的含义,选项及参数的用法;git的使用主要是要理清git进行版本管理的方式,了解git add、git commit、git push、git pull等的基本用法以及使用git进行版本切换、分支切换等的方式;gcc的使用主要是要理解gcc编译文件的原理,同时要学会make的用法、Makefile的写法。
1、下面对于Git进行版本管理的方式,即Git的三棵树采用示意图的方式进行总结:
2、下面对C语言的编译过程进行总结:
阶段 | 执行操作 | 生成文件后缀 |
---|---|---|
预处理 | 以源文件作为输入,调用cpp生成预处理文件 | .i |
编译 | 以预处理后文件作为输入,调用cc1生成汇编文件 | .s |
汇编 | 以汇编文件作为输入,调用as生成目标文件 | .o |
链接 | 以目标文件作为输入,调用ld生成可执行文件 | .out |
让gcc只进行预处理操作:
$ gcc -E hello.c -o hello.i
让gcc进行到编译操作:
$ gcc -S hello.i -o hello.s
让gcc进行到汇编操作:
$ gcc -c hello.s -o hello.o
本次实验的内容细节较多,绝大部分内容需要记忆,对于这部分内容,通过这次实验我的体会便是一定需要动手去实践,看再多遍也不如自己亲手在命令行中打下一条条指令亲手测试的效果好,这一点对于以后的学习也有帮助,在遇到比较繁琐的内容需要学习时,一定不能偷懒,“光说不练假把式”,亲身实践永远是最好的学习方式。
在这一次实验中,令我印象深刻的主要有以下几个点:
第一,在进行Makefile文件的编写时,一定要提前整理好各个文件之间的依赖关系,这一点是容易出错且容易遗漏的。其次,我们要把Makefile文件当做自己执行手动执行某一过程时所有行为的聚合,这样才能真正理解make和Makefile使用的意义。
注意:Makefile中command行开头要使用Tab进行分隔
如下命令可以改变make的执行目录:
($MAKE) -C newdir <tag>