一、实验目的:
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
(1)初次配置Git
设置Git的用户名、邮箱,确保Git输出内容带有颜色标记,对比显示原始状态。
(2)设置编辑器
我选用的是Sublime Text编辑器,进行如下设置。
2.创建仓库
(1)创建项目目录
创建一个叫 se2020-git-course 的目录,在这个目录中创建另一个目录,叫做 new-git-project,使用cd命令移到 new-git-project 目录下。
(2)克隆现有仓库
在运行git init后,会在当前目录下初始化生成一个空的Git仓库。在终端上运行命令git clone,然后传入要克隆的仓库路径。
这里有一个warning,我把https输成了http。
如果要换一个名称,则输入如下命令。
进入course-git-blog-project文件夹,用浏览器打开index.html文件,就可以看见克隆的blog网页。
(3)判断仓库的状态
运行git status命令,将显示很多信息,帮助我们了解仓库的状态。
图中Utracked files是没有跟踪的文件。
3.git log命令
(1)git log
运行该命令:可以查看标题是何时被添加的,添加了这个标题的作者。
(2)git log --oneline命令
运行该命令:每行显示一个 commit;显示 commit 的 SHA 的前 7 个字符;显示 commit 的消息。
(3)git log --stat命令
运行该命令:显示被修改的文件;显示添加/删除的行数;显示一个摘要,其中包含修改/删除的总文件数和总行数。
(4)git log -p命令
git log 命令具有一个可用来显示对文件作出实际更改的选项。
此命令会向默认输出中添加以下信息:显示被修改的文件;显示添加/删除的行所在的位置;显示做出的实际更改。
(5)处理太多滚动操作
向git log提供要查看的commit的SHA,或者使用git show命令,就能显示特定的commit的详情。
4.git add&git commit&git diff
(1)新建文件
进入new-git-project目录,创建一个名为index.html的文件,并添加一些起始代码;建立js和css文件夹,并在文件下分别建立app.js和app.css文件,文件内容为空。
添加代码
这里我在添加代码时vi 后面的文件名没有加上.html,这样其实是新建了一个index文件,是错误的。
下图为改正后的截图。
此时运行git status命令,结果显示git还没有跟踪这些文件。
(2)git add
想要将文件提交到仓库中,首先需要将文件从工作目录移到暂存区,git add命令可以将文件从目录移到暂存区。
此时三个文件都移到暂存区了。可以使用git add.将所有文件一次性都移到暂存区中。
(3)提交Commit
在提交之前,确认编辑器配置完毕。运行git commit命令,等待一会后编辑器会打开并跳出一个窗口。
在编辑器窗口首行输入消息“Initial commit”
输入消息后记得保存,然后关闭编辑器,即完成提交。
(4)Commit-添加更改
在index.html中的body标记中添加代码。
运行git status,结果可以看到index.html已更改。
使用git add命令将修改后的index.html文件移到暂存区,然后运行git commit命令提交第二个commit,并添加提交说明Add header to blog。
使用git log查看刚刚提交的commit。
(5)git diff
git diff命令可以用来查看已被加入但是尚未提交的更改。运行该命令会显示:已经修改的文件;添加/删除的所在行的位置;执行的实际更改。
(6)gitignore
如果想要某个文件保留在项目的目录结构中,但是确保它不会意外地提交到项目中,可以使用名称特殊的文件.gitignore。
先新建文件project.docx和.gitignore,将project.docx添加进.gitignore文件中。
5.标签、分支
(1)向以前的commit添加标签
运行git tag -a v1.0将为最近的commit添加标签,如果想给仓库中特定的commit添加标签,只需要提供添加标签的commit的SHA即可。
运行git log查看标签
(2)git branch分支
列出仓库中的所有分支名称
(3)创建分支、git checkout命令、活跃分支
创建分支sidebar,此时如果进行commit的话,将会添加到master分支,使用git checkout命令则可切换到sidebar分支,然后运行git log --oneline命令可看到HEAD指示符指向sidebar,现在提交的任何commit将添加到sidebar分支。通过git branch命令可查看到当前活跃分支为sidebar。
(4)删除分支
当git branch -d无法删除当前所在分支时,需要切换分支,或者使用git branch -D进行强制删除。
(5)添加页面颜色
在master分支上,向css/app.css中添加代码,保存后将文件添加到暂存区,并将其提交到仓库,输入消息Set background color for page,git log检查commit记录。
(6)添加侧栏
此时在master分支提交的“Set background color for page”commit已经没有了。
查看app.css文件,里面内容是空的,因为内容存储在另一个分支上。
向html文件添加<aside>代码,为页面添加一个侧栏。完成之后,即可commit更改了。用git log --oneline查看commit。
(7)更改master上的标题
更改后保存index.html文件并进行commit,消息为“Improve site heading for SEO”,用git log --oneline检查。同时查看所有分支。
6.合并
(1)合并分支
可将不同分支上的更改合并到一起。
(2)合并冲突
如果完全相同的行在不同的文件中更改了,将产生合并冲突。
制造冲突:
在master分支上更改标题,,git log检查;
在一个commit上创建一个heading-update分支;
切换到heading-update分支再次更新标题;
切换到master分支上,进行合并分支,合并失败;
(3)解决合并冲突
在编辑器中进行修改
修改后
(4)commit合并冲突
修改后保存,将文件添加到暂存区,git commit,用git log --oneline检查
7.撤销更改
(1)更改最后一个commit
(2)git revert命令
(3)git reset命令
HEAD指向de4fb37上的master,运行git reset --mixed HEAD^会把commitde4fb37中做出的更改移到工作目录中。
第一次错误是把head拼错了。
四、实验总结与体会
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,具有许多功能。本次实验跟着学习通上老师写的步骤做下来基本上没遇到什么问题,一些错误是单词拼写上的错误。通过本次实验,基本掌握了git的基本指令和分支管理指令,但还不够熟练,还需要多做多练习。
五、思考题
阅读维基百科和百度百科 的Git词条,总结分布式分布式版本控制系统的核心机理。
答:分布式版本控制系统DVCS。在这类系统中像Git,Mercurial,Bazaar以及Darcs等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
适合分布式开发,强调个体;公共服务器压力和数据量不会太大;速度快灵活;任意两个开发者之间可以很容易的解决冲突;离线工作。 但学习周期相对而言比较长;不符合常规思维;代码保密性差,开发者把整个库克隆下来可以完全公开所有代码和版本信息。