实验一 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)实验内容结果的截图
- 安装git: 根据群里发的下载后按照相关要求进行安装。
- 初始配置git:在开始使用 Git 之前,需要配置 Git。在命令行工具中运行以下每行,确保所有选项都已被配置好。
# 设置你的 Git 用户名:git config --global user.name "<Your-Full-Name>"
# 设置你的 Git 邮箱:git config --global user.email "<your-email-address>"
# 确保 Git 输出内容带有颜色标记:git config --global color.ui auto
# 对比显示原始状态:git config --global merge.conflictstyle diff3 git config --list
运行过程及结果如下图所示:
3.从头创建仓库:
(1)从头创建仓库:在对Git仓库进行commit或执行任何其他操作之前,需要一个实际存在的仓库。
(2)创建项目目录:创建一个目录,叫做 se2020-git-course,在该目录中,创建另一个目录,叫做 new-git-project,使用 cd 命令移到 new-git-project 目录下。
(3)git init:该命令会在当前目录下初始化生成一个空的Git仓库.。
(4)克隆现有仓库:在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL)。首先需要验证终端 位置,在克隆任何内容之前,确保命令行工具已定位于正确的目录下。克隆项目会新建一个目录,并将克隆的 Git 仓库放在其中。问题是无法创建嵌套的 Git 仓 库。因此,确保终端的当前工作目录没有位于 Git 仓库中。输入命令 git clone,然后输入你要克隆的 Git 仓库的路径。
(5)判断仓库状态:git status 命令将显示很多信息,具体取决于你的文件状态、工作目录和仓库,显示你需要知道的信息。
输出结果告诉了我们几条信息:On branch master – 这部分告诉我们 Git 位于 master 分支上,(也就是默认分支)。Your branch is up-to-date with 'origin/master'. – 因为我们使用 git clone 从另一台计算机上复制了此仓库,因此这部分告诉我们项目是否与所复制的仓库保持同步状态。我们不会在其他计算机上 处理该项目,因此这一行可以忽略。nothing to commit, working directory clean – 表示没有任何待定的更改。
4.git log:
(1)git log命令用于显示仓库中所有commit的信息,默认情况下该命令显示仓库中每个commit的:SHA,作者,日期,消息。
(2)git log --oneline:使输出结果更剪短,并节省大量空间。
(3)git log --stat:The git log命令有一个选项可以用来显示commit中更改的文件以及添加或删除的行数。
(4)查看更改:git log命令具有一个可用来显示对文件作出实际更改的选项。该选项是--patch,可以简写为-p:$ git log -p。运行该命令并查看显示结果。
(5)处理太多滚动操作:为显示特定commit的详情,而不关心仓库中的所有其他内容,有两种实现方式:向git log提供你要查看的commit的SHA;使用新的git show命令。
5.git add&git commit&git diff:
(1)添加新文件,并使用git status检查状态:进入到new-git-project,创建index.html文件,建立js,css文件夹,并在文件下分别建立app.js和app.css文件,文件内容可为空。并用git status查看状态。
(2)暂存文件:使用git add命令将文件从工作目录移到暂存区,工作目录中目前有三个未跟踪文件:index.html;css目录下的app.cs;js目录下的app.js。
(3)暂存剩余文件:index.html已暂存,再暂存另外两个文件。
(4)提交Commit:安装sublime Text,并运行以下语句进行配置,使得编辑器打开,在编辑器第一行输入Inital commit文本,保存文件并关闭编辑器窗口,提交第一个commit.
(5)第二个commit-添加更改: 将以下内容添加到index.html 中的 body 标记中:<header> <h1>Expedition</h1> </header>,运行git status
(6)git diff:git status 命令告诉我们可以哪些文件被更改了,但是不会显示到底是什么样的更改,git diff却可以。Git diff命令可以用来查看已被加入但未提交的更改,在index.html中将标题从"Expedition"改为"Adventure"。保存文件,然后在终端上运行git diff。
6.标签、分支:
(1)git tag标签:进入前面建立的new-git-project项目文件夹中,先看git log 输出结果。
(2)git tag命令:我们将使用 git tag 命令与仓库的标签进行交互。输入以下命令:git tag -a v1.0打开代码编辑器,我们输入"Ready for content"作为tag。
(3)验证标签:保存退出编辑器后,输入git tag,命令行会显示仓库中的所有标签。
(4)git log可知道标签位于仓库哪个位置
(5)删除标签:如果我们将标签消息中的某个字打错了,或标签名称打错了(输入 v0.1,而不是 v1.0),可以通过输入 -d 选项(表示delete删除!)加上标签名称来删除git标签。
(6)向以前的commit添加标签:如果想向仓库中很久之前的commit添加标签,只需提供要添加标签的commit的SHA即可。先查询历史SHA git log --oneline,查找已经commit的SHA,运行git tag -a v1.0 79cab31
(7)git branch分支:输入git branch,则git将列出仓库中的分支
(8)创建分支:创建分支,只需使用git branch并提供要创建的分支对应的名称
(9)切换分支:git checkout 命令,将master分支切换到sidebar 分支
(10)显示分支:提示符中的分支信息很有用,但是最清晰的查看方式是查看git log 的输出结果。
(11)活跃分支:提示符将显示活跃分支,判断活跃分支最快的方式是查看git branch命令的输出结果,活跃分支旁边会显示一个星号
(12)删除分支:使用-d选项删除git给出的分支,无法删除,因此要删除sidebar分支,切换到master分支,或者创建并切换到新的分支,运行如下:
(13)分支实战:
更改1-添加页面颜色:确保位于master分支上,并向css/app.css添加以下内容body{background-color:#00cae4;},将文件添加到暂存区,并将其commit到仓库,在仓库中第一行写Set background color for page,通过 git log检查commit记录。
更改2-添加侧栏:将sidebar分支放在设置页面颜色的commit之前,向该commit添加分支命令,使用git checkout命令切换到新的siderbar分支,运行git log --oneline --decorate,运行 git log --oneline,发现Set background for page没有了。
更改3-更改master上的标题:切换到master分支并更新页面标题,使用git checkout命令切换到master分支,保存index.html文件并进行commit已将此添加到仓库中,消息写为“Improve site heading for SEO”,提交后用git log --oneline检查。
(14)同时查看所有分支:使用新的--graph和--all选项;运行git log --oneline --graph --all显示仓库中所有分支和commit
7.合并
(1)合并:现检查是否位于new-git-project;是否检出master分支;git status输出文本包括working directory clean。合并指令:git merge指令用来合并git分支
(2)合并冲突
在分支上更改标题1:在master分支上更改标题,将<h1>标题改为其他内容。做出更改后,保存文件并commit到仓库。
在分支上更改标题2:使用git log获取上一个commit的SHA;在该commit上创建一个heading-update分支;使用git log --oneline --graph --all输出结果。
前几步误创建了分支sidrbar,现将它删除
(3)解决合并冲突:git 使用合并冲突指示符来告诉我们两个不同分支上的哪些行导致了合并冲突,以及原始行是什么。要想解决合并冲突,我们需要:选择保留哪些行;删掉所有带指示符的行。
8.撤销更改
(1)更改最后一个commit:运行git commit --amend,重新提供commit消息,代码编辑器打开,显示原始的commit消息,纠正错误或重新表述,然后保存文件并关闭,以便采用新信息。
(2)向commit中添加忘记文件:git commit --amend能够包含忘记包含文件(或文件更改)。
(3)还原commit:使用git revert命令还原,找到最近的commit的SHA,运行git revert SHA,弹出代码编辑器,确认提供的commit消息。
(4)重置:git reset命令用来重置(清楚)commit;使用 --hard
选项清除 commit ;使用 --soft
选项将 commit 的更改移至暂存区;使用 --mixed
选项取消暂存已被 commit 的更改
(5)备份分支:在最近的 commit 上创建一个 backup
分支,因此如果出现错误,可以返回这些 commit;然后运行git reset --mixed HEAD^会把commit中做出的更改一直工作目录中。
2)实验中发生的问题与解决
(1)配置git中,一开始按照要求设置我的用户名和邮箱,最后在运行结果中却不显示。
解决:用户名和邮箱要规范书而写,用户名不能是中文,注意空格和拼写,在该空格的地方没空格。
(2)git log 之前git status要显示出nothing to commit,workig dyrectory clean,怎么弄都显示不出这个结果。
解决:要显示的status结果是对course-git-blog-project来说,而我没有转到该文件目录下,一直再对new-git-course做操作,应该:cd course-git-blog-project。
(3)提交commit时,安装了sublime Text软件,并按照学习通里面的语句配置,发现输入git commit后无法自动打开编译器。
解决:仍是sublime Text软件配置问题,不能照搬学习通里面的配置语句,要根据自己的软件所在的实际位置来配置。
实验总结与体会:(以下内容根据各自实验情况填写)
通过老师在学习通里面给的步骤一步一步来操作,能够基本上出现大部分运行结果,学习并掌握了一些基本的git命令,合并这一部分仍需要多加理解动手去做,这一部分做的不是很好。
思考题:(以下内容根据各自实验情况填写)
阅读维基百科和百度百科 的Git词条,总结分布式分布式版本控制系统的核心机理
答:Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持(wingeddevil注:这得分是用什么样的服务端,使用http协议或者git协议等不太一样。并且在push和pull的时候和服务器端还是有交互的。),使源代码的发布和交流极其方便。 Git 的速度很快,这对于诸如 Linux kernel 这样的大项目来说自然很重要。 Git 最为出色的是它的合并跟踪(merge tracing)能力。