实验一 GIT 代码版本管理
一、实验目的:
1)了解分布式分布式版本控制系统的核心机理;
2)熟练掌握git的基本指令和分支管理指令;
二、实验内容:
1)安装git
2)初始配置git ,git init git status指令
3)掌握git log ,git add ,git diff 指令
4) 掌握git tag git branch,git commit 指令
5)掌握git revert 指令
三、实验记录:
1)实验内容结果的截图
(1)安装Git
(2)初始配置Git
设置Git用户名,邮箱,确保Git输出内容带有颜色标记
对比显示原始状态
将Git与代码编辑器结合使用
(3)从头创建仓库
使用mkdir 创建项目目录se2020-git-course,在该目录中,创建另一个目录,叫做 new-git-project,使用 cd 命令移到 new-git-project 目录下。
使用git init命令在当前目录下初始化生成一个空的 Git 仓库
使用git clone 命令克隆现有仓库(确保终端的当前工作目录没有位于 Git 仓库中) ,进入course-git-blog-project文件夹,在你喜欢的浏览器中打开 index.html 文件,可用看见已经克隆的blog网页。
使用git status 命令判断仓库的状态(空仓库与非空仓库运行的结果不同)
(4)git log命令
git log 命令用于显示仓库中所有 commit 的信息,默认情况下,该命令会显示仓库中每个 commit 的(SHA、作者、日期、消息)
git log --oneline 命令:每行显示一个 commit、显示 commit 的 SHA 的前 7 个字符、显示 commit 的消息
git log --stat用来显示 commit 中更改的文件以及添加或删除的行数
git log -p:此命令会向默认输出中添加以下信息:显示被修改的文件,显示添加/删除的行所在的位置,显示做出的实际更改(git show 命令将仅显示一个 commit)
(5)git add & git commit & git diff
在new-git-project目录下创建一个index.html文件,建立 js 和css 文件夹,并在文件下分别建立 app.js 和 app.css 文件,使用git status命令发现git并为跟踪到这些新建的文件
要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区,使用 git add 命令将index.html文件移到暂存区,再使用git status命令发现文件存在暂存文件夹
使用使用 git add .( 句点指代当前目录,可以用来表示所有文件和目录(包括所有嵌套文件和目录!))将所有文件提交到暂存区,再次使用git status命令发现所有文件存在暂存文件夹
使用git commit 命令打开编辑器后,在首行输入Initaial commit保存文件并关闭编辑器窗口(只关闭面板/标签页还不够,还需要关闭git commit命令打开的代码编辑器窗口),回到终端后会发现如下输出结果
在index.html文件的body中输入代码,保存后返回终端显示了 git status 命令的结果。它显示了"Changes not staged for commit"部分,其中包含修改后的"index.html"文件
在index.html
中,将标题从"Expedition"改为"Adventure",保存文件,然后在终端上运行 git diff,会显示出
已经修改的文件,添加/删除的行所在的位置和执行的实际更改
(6)标签,分支(git tag,git branch)
使用 git tag 命令与仓库的标签进行交互,在命令 (git tag -a v1.0
) 中,使用了-a
选项,该选项告诉 git 创建一个带注释的标签;如果已经存在标签,只需输入git tag
,命令行会显示仓库中的所有标签。
如果标签输入错误,可以通过输入 -d 选项 (表示 delete 删除!)加上标签名称来删除 git 标签
git branch它可以用来:列出仓库中的所有分支名称,创建新的分支,删除分支(*提示符显示的是活跃分支);使用git branch sidebar来新建一个标签;使用git checkout sidebar来切换到sidebar标签中
切换到master标签中使用git branch -d sidebar 命令来删除sidebar标签
可以使用 git log --oneline --graph --all命令来显示仓库中的所有分支和 commit
(7)合并(git merge)
使用git merge命令来合并分支
制造合并冲突,使用 git log 获取上一个 commit 的 SHA,在该 commit 上创建一个heading-update分支(使用git checkout SHA 转换到此SHA下,再使用git checkout -b 来创建分支)
合并两个分支发现产生合并冲突
使用git status处理合并冲突
当相同的行在要合并的不同分支上做出了更改时,就会出现合并冲突。git 将在合并途中暂停,并告诉你存在冲突,以及哪些文件存在冲突。要解决文件中的冲突:
-
找到并删掉存在合并冲突指示符的所有行
-
决定保留哪些行
-
保存文件
-
暂存文件
-
提交 commit
(8)撤销更改(git revert)
更改最近的commit信息
还原commit信息
重置(清除)commit信息后发现commit里内容为空
2)实验过程中发生的问题与解决
(1)在使用cd命令更改目录时,使用cd- 更改到home目录,在更改目录时要写全目录名称
(2)在运行git commit命令时显示需要告诉它用户名和地址信息,将用户名和email地址重新输入后可以得到正确的运行结果
(3) 在删除分支时不可以在当前目录删除当前分支,需要切换到其他分支下来删除此分支
四、实验总结与体会:
通过这次git实验我学到了许多与git相关的知识,在实验的过程中我遇到了许多的问题,虽然有实验指导与实验步骤做参考,但在自己实际操作的过程中还是大大小小的遇到了许多问题,重新做了几遍,再通过网上查询与询问同学,最后终于将实验给完成了。在使用git log命令查询commit信息做学习通中的题时,最开始只是逐个的按照题中信息对SHA进行查找,但commit信息太多,查询速度很慢,而且会有的信息找不到,经过后来的实验发现可以通过git log -p SHA或git show SHA命令来进行具体的commit信息查询;这次实验虽然做了很久,也重新做了几遍,但它让我的印象更加深刻了,也为我在以后的理论学习和实验中打下了基础。
五、思考题:
阅读维基百科和百度百科的Git词条,总结分布式分布式版本控制系统的核心机理
答:Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,不必服务器端软件支持,使源代码的发布和交流极其方便,分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者可以通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库,各种版本的操作都可以在本地完成。