实验一 Git代码版本管理
实验一 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,安装成功
2)初始配置git ,git init git status指令
①初始配置git
设置git用户名、git邮箱、确保git输出内容带有颜色标记、对比显示原始状态

配置默认代码编辑器(以sublime text为例)

②git init
首先创建项目目录:se2020-git-course,在该目录中,创建另一个目录:new-git-project,使用 cd 命令移到 new-git-project 目录下。使用cd命令时,未严格按照实验指导所给命令,而是根据惯性思维写了cd new-git-project,结果显示无此文件,因为此时文件目录尚未被创建

修改命令后创建成功

再运行git init命令,在当前目录下初始化生成一个空的 git 仓库。运行后,后面提示符中出现了master(以上截图中,后面的提示符均有master,因为操作伊始,过早运行了git init)

③克隆现有仓库
克隆的前提是要确保终端的当前工作目录没有位于git仓库中。可在目录下运行git status查看目录里的文件是否在git仓库中。

提示符不包含一个用小括号括起来的名称,当前工作目录不位于git仓库,可以进行克隆

如果需要换一个名称为 blog-project目录

进入course-git-blog-project文件夹

打开index.html文件可以看见已经克隆的blog网页
④git status
判断仓库状态。切换到new-git-project 项目,git status 输出结果如图

.On branch master – 这部分告诉我们 Git 位于 master 分支上,(也就是默认分支)。
.Your branch is up-to-date with 'origin/master'. – 因为我们使用 git clone 从另一台计算机上复制了此仓库,因此这部分告诉我们项目是否与所复制的仓库保持同步状态。我们不会在其他计算机上处理该项目,因此这一行可以忽略。
.nothing to commit, working directory clean – 表示没有任何待定的更改。
3)掌握git log ,git add ,git diff 指令
①git log
克隆course-git-blog-project 仓库后,使用命令行转到项目的目录下

此时git status 的输出结果是:"nothing to commit, working directory clean",意味着我们可以继续并检出该项目
运行git log,可以显示仓库中所有commit的信息

git log --oneline可以用来个更改仓库信息的显示方式

git log --stat可以用来显示commit中更改的文件以及添加或删除的行数

git log -p可用来显示对文件作出实际更改的选项

git log -p SHA / git log show SHA显示特定commit的详情,二者运行结果相同

②git add
进入到new-git-project,创建html文件index.html,建立文件夹js和css,并在文件下分别建立 app.js 和 app.css 文件,文件内容可为空。运行git status

可以看出git没有跟踪这些文件。要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区。使用 git add 命令将这三个文件移到暂存区。

终端显示 index.html 现在位于"Changes to be committed"(暂存)分类下
再暂存另外两个文件

③git commit
cmmit之前需要在文件更改后运行git add <文件名>命令,同时要确保已经配置好代码编辑器

提交说明为Initial commit。提交完成
现在提交第二个commit
在index.html中添加一段内容后运行git status

再分别运行git add与git commit,并添加提交说明Add header to blog


第二次提交完成
③git diff(运行结果与git log -p相同)
在进行提交之前告诉我们已对文件进行了什么样的更改

④gitignore
想要将某个文件保留在项目的目录结构中,但是确保它不会意外地提交到项目中,可以将文件添加到 new-git-project项目根目录。只需列出希望 git ignore(忽略,不跟踪)的文件名,git 将忽略这些文件。
如果欲忽略文件xx.docx,则将语句:xx.docx添加到.gitignore文件中

现在运行git status

word文档已不再列为未跟踪文件,但是列出了新的.gitignore文件
4)掌握git tag git branch,git commit 指令
①git tag
使用 git tag 命令与仓库的标签进行交互

上述命令将打开代码编辑器,输入Ready for content作为tag

使用git tag验证标签

该标签位于仓库中
可以再使用git log(或者git log --decorate),从而得知标签位于仓库的哪个位置

输出结果显示有tag:v1.0
可以利用git tag -d v1.0删除标签

向以前的commit添加标签:git tag -a v1.0,要先查询历史SHA(运行git log --oneline),查找已经commit的SHA

查找到SHA为a9be99e,向SHA为a9be99e的commit添加标签

②git branch
git列出仓库中的分支

创建分支sidebar:git branch sidebar,创建成功后它还不是当前分支,使用git checkout命令切换到该分支,后续提示符中出现的不再是master而是sidebar

运行后,从工作目录中删除git 跟踪的所有文件和目录,同时转到仓库,并提取分支指向的commit所对应的所有文件和目录
可以使用git log --oneline显示分支

运行git branch显示活跃分支

活跃分支名称前带*。当前活跃分支为sidebar
若要删除分支,运行git branch -d sidebar。注意无法删除当前所在分支,需要先切换到其他分支。如果仍删除不了,可强制删除:git branch -D sidebar

高效分支:
a:添加页面颜色:在css/app.css中添加新内容
body
{
background-color:#00cae4;
}
保存后运行git add app.css再运行git commit,commit内容:Set background color for page
最后通过git log检查commit记录


b:添加侧栏
将sidebar分支放在设置页面颜色的commit之前

设置页面颜色的commit之前的SHA为d0a8018
现在切换分支

再运行 git log --oneline

在master分支提交的Set background color for page的commit已经没有了,通过向HTML文件添加<aside>代码,为页面添加一个侧栏,此时可以commit任何更改了
c:更改master上的标题
切换到master分支,将HTML文件标题改变,保存后commit,可将commit消息写为Improve site heading foro SEO。提交后用git log --oneline

同时查看所有分支

③合并
要合并sidebar分支,要确保当前位于master分支

5)掌握git revert 指令
一个包含一些更改的commit,可以使用git revert 还原它
若要还原SHA为be02f7d的commit,需要运行git revert be02f7d

此命令将撤销目标commit所做出的更改,创建一个新的commit来记录这一更改。
实验总结与体会
1)作为初学者,对实验的操作步骤不能随意。因为还原操作又将涉及新的指令,可能弄巧成拙;
2)实验开始前应该预习,以便加深对实验过程的理解;
3)git速度快,且灵活;
4)对于任何一个文件,在git中只有三种状态:committed,modified,staged。git基本工作流程是①在工作目录中修改文件;②运行git add <文件名>,将修改的文件保存到暂存区域;③运行git commit,将文件转存至git目录中。
思考题
阅读维基百科和百度百科的Git词条,总结分布式版本控制系统的核心机理。
答:git就是一个软件管理器,不同一般的是它是分布式的,不仅有一个中心的服务器控制最新版本代码,而且每个开发者自己还有个本地仓库,所以在开发过程中都是先将代码提交到本地仓库再推送到中心服务器上的,这样的好处就是每个人都依赖于中心服务器来实现交互,但又不会被中心服务器限制,就算中心服务器挂了,也能很容易的找到最新版本的代码,而且自己的工作依然可以顺利进行,提交到本地仓库,当中心服务器修复之后,再将自己仓库的东西推送到中心服务器。

浙公网安备 33010602011771号