软件工程实验一 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:从官网上下载Windows版本的Git安装包,然后安装Git,并选择所有默认选项。
2、初始配置Git
1)初始化Git
设置Git用户名、Git邮箱、使Git输出内容带有颜色标记,最后输入git config --list,输出结果如下图:
2)设置Git的代码编辑器(本次实验选择Sublime Text编辑器)
输入git config -global core.editor”’D:\projectTools\Sublime Text 3\sublime text.exe’-n -w”,需要注意的是输入的是 sublime text.exe的安装路径。
3、创建仓库
1)创建项目目录
创建一个目录:Git,在该目录中创建另一个目录:Git仓库。
运行git init时,出现如下图错误:
百度上说:clone时不能用绝对路径,只能写相对于Git用户home的相对路径。后来发现自己运行应用程序错误,原先选的 是第二个出现错误,正确应该选第一个运行。正确结果如下图:
由于“.git”文件是隐藏文件,需要要在选择“查看”,然后选中“隐藏的项目”,选中后,出现“.git”文件。正确运行git init时,会在当前目录下初始化生成一个Git仓库。如下图所示:
(本次获取Git仓库所采用的范式克隆一个已存在的Git仓库,获取Git仓库另外一个方式是:将已有项目或目录导入为Git仓库)。详见方式可见https://git-scm.com/book/zh/v2/Git-基础-获取-Git-仓库。
2)克隆现有仓库
首先需要验证终端位置,在克隆任何内容之前,确保命令行工具已定位于正确的目录下,所以要确保终端的当前工作目录没有位于Git仓库中,输入命令git clone,然后输入要克隆的Git仓库路径为:https://github.com/udacity/course-git-blog-project。出现下图错误:
查看错误发现密码输入错误,再对比其他同学实验结果发现,当前目没有选择,所以选择当前目录Git下,输入正确的密码后,运行结果如下图:
3)判断现有仓库的状态
在当前course-git-blog-project目录下,使用命令:git status。结果如下图:
由于没有新的文件、没有对文件作出更改、暂存区没有任何需要commit的内容、更改或操作。(这是已经具有commit的仓库中运行git status的状态)
接下来,将在没有commit的仓库中运行git status,结果如下图:
问题:如何证明此仓库尚无任何commit?
解:运行命令git log,结果出现下图,则证明此仓库尚无任何commit。
4、git log命令
git log命令用于显示仓库中所有commit的信息,默认情况下,该命令会显示仓库中每个commit的:SHA,作者,日期,消息。
1)git clone –online命令
E 每行显示一个commit
E 显示commit的SHA的前7个字符
E 显示commit的消息
2)git log --stat命令
可以用来显示commit中更改的文件以及添加或删除的行数。同时还会显示一个摘要,其中包含修改/删除的总文件数。
注意:在查看git log 输出时,需要用D键向下滚动半个页面,而用U键可以向上滚动半个页面。
3)git log -p命令
可用来显示对文件作出实际更改的选项,即此命令在默认情况下会显示被修改的文件、显示添加/删除的行所在的位置、显示做出的实际更改。
4)git show命令
git show 命令仅显示一个commit,默认情况下,会显示:commit、作者、日期、commit消息以及补丁信息等。因此git show命令的输出和git log -p命令的结果是一样的。
5、git add & git commit & git diff命令
1)添加新文件,并用git status检查状态
①在Git仓库目录下,创建HTML文件(名为:index.html),并添加一些起始代码;
②建立js和css文件夹,并在文件下分别建立app.js和app.css文件,文件内容可为空。
③输入命令git status,查看当前目录,如下图:
从图中可以看出,git没有跟踪刚刚建立的文件们。
2)暂存文件:git add命令
要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区。使用命令git add index.html、git add app.js/app.css,或者使用命令git add . (暂存剩余的文件)。再用git status命令查看,结果如下图:
注意:git rm –cached与shell的rm命令不同,git rm –cached不会破坏任何属于你的文件,它只是从暂存区删除了文件。
3)提交首个commit
使用git commit命令,来提交commit,编辑器会自动打开,界面如下:
在编辑器首行输入:Initial commit,保存,关闭编辑器,回到中断,出现下图:
由于之前提交过一次,忘记保存,是有如下类似结果显示的:
此处,可以使用-m选项绕过编辑器,可以不用等待打开编辑器后再输入信息,可以直接在命令行中使用-m 选项传入信息。(适用情况:要编写的提交说明很简短)
4)第二个commit-添加更改
将index.html文件进行添加修改,使用git status查看如下:
接着使用git add命令将文件移到暂存区,并使用git status验证文件是否位于暂存区。最后使用git commit命令提交commit,并添加说明Add header to blog.结果如下:
5)git diff命令
此命令可以用来查看已经被加入但是尚未提交的更改。即可以显示已经修改的文件、添加/删除的行所在的位置以及执行的实际更改。在index.html中将标题从“Expedition”改为“wanghui”,保存文件,然后在终端运行git diff命令。结果如下:
6)gitignore命令
如果你想将某个文件保留在项目的目录结构中,但是确保它不会意外地提交项目中,可以使用特殊文件:.gitignore,将此文件添加到项目的根目录中,列出希望 git ignore(忽略)的文件名,git将会忽略这些文件。
①新建文档:project.docx,用touch .gitignore命令生成.gitignore文件,并将此文件名保存在.gitignore文件中。
②输入git status命令,查看如下:
观察图可以发现,文件还是被放在暂存区,说明出现错误。经过重新来一次,出现结果如下:
观察图发现,Word文件已不再列为未跟踪文件,但是列出来新的“.gitignore”的文件。“.gitignore”文件用来告诉git不应该跟踪的文件。
6、标签、分支
1)git tag标签
①git tag命令
在Git仓库文件中,使用git tag命令与仓库的标签进行交互,输入:git tag -a v1.0,结果如下图,同时编辑器会自动打开,并在第一行输入“Ready for content”作为tag。
②验证标签
保存并退出编辑器,在终端输入:git tag,命令行会显示仓库中的所有标签。
使用git log可以查看标签位于仓库中的什么位置,如下所示:
③删除标签
当标签消息中的某个字打错了,或标签名打错了,可以通过删除这个标签并重新创建来修正这个错误。
方法:可以通过输入-d选项(表示delete删除)加上标签名来删除git标签,如下图所示:
2)git branch分支
①git branch命令
可以用来列出仓库中的所有分支名称、创建新的分支、删除分支。
如上图所示,显示了master分支。
②创建分支
若想创建一个名为“sidebar”的分支,运行命令:git branch sidebar。
③git checkout命令
使用git checkout命令进行分支转换,即从master分支转换到sidebar分支。
此命令的工作方式:从工作目录中删除git跟踪的所有文件和目录(git跟踪的文件存储在仓库中,因此不会丢失)、转到仓库,并提取分支指向的commit所对应的所有文件和目录。
理解:此命令将删除master分支中的commit引用的所有文件,它会将这些文件替换为sidebar分支中的commit引用的文件。
提示符中的分支信息很有用,但是最清晰的查看方式是查看git log的输出结果。
④活跃分支
判断活跃分子的最快速方式是查看git branch命令的输出结果。
⑤删除分支
若想要删除sidebar分支,则需输入命令:git branch -d sidebar.
注意:无法删除当前所在的分支,因此想要删除sidebar分支,需要切换到master分支,或者创建并切换到新的分支。若需要强制删除,需要使用大写的D选项,即git branch -D sidebar。
⑥高效分支
下载实验内容的index.html文件(这里为防止重复,命名为1index.html)。删除前面建好的sidebar分支、所有文件暂存并提交仓库中、切换到master分支,运行git status。观察结果,出现working tree clean。
3)分支实战
①添加页面颜色(确保位于master分支上),并向css/app.css添加以下内容:
保存文件,进行如下操作:
②添加侧栏
通过向html文件添加实验内容代码,该代码将为页面添加一个侧栏。注意:此时不要修改css文件,否则会出现“合并冲突”。接着进行如下操作:
③更改master上的标题
将页面的标题从“Expedition”改成“Adventure”,进行如下操作:
④同时查看所有分支
7、合并
将分支上的更改与其他分支上的更改合并。发生合并时,git将查看将合并的分支、查看分支的历史记录并寻找两个分支的commit历史记录中都有的单个commit、将单个分支上更改的代码行合并到一起、提交一个commit来记录合并操作。
撤销合并命令:git reset --hard HEAD^
1)合并指令:git merge
在master分支中,输入命令:git master sidebar,提交commit,结果如下:
2)合并冲突
合并失败时,就成为合并冲突。如果完全相同的行在不同的文件中更改了,将产生合并冲突。
①制造合并冲突:在两个不同的分支上更改同一页面的标题。
在master分支上更改标题,将“Adventure”改成“Quest”,更改后保存文件并commit到仓库。
在该commit创建一个heading-update分支,使用git –oneline –graph –all 查看。
切换到heading-update分支更改标题,将“Adventure”改成“Crusade”,保存文件,并将文件commit到仓库。
切换到master分支,合并两个分支,产生合并冲突,如下:
观察图发现,并没有发生合并冲突,通过重新操作,出现下图:
反思自己,总是出现这个错误,感觉自己太不细心,以后多多注意,要有耐心做实验或者动手。
可以使用git status命令,知道哪里存在合并冲突。
3)合并冲突指示符
用代码编辑器打开1index.html 文件,出现合并冲突符。
4)解决合并冲突
将标题代码改成如下图所示:
保存文件,并将文件commit到仓库中。
8、撤销更改
1)更改最后一个commit
使用命令:git commit –amend,结果如下:
编辑器自动打开,显示出原始commit消息,修改需要改的地方,然后保存文件并打开编辑器。
2)还原commit,使用git revert命令:将撤销目标commit所做出的更改、创建一个新的commit来记录着一个更改。
3)重置
重置(reset)不同于还原(revert),会清除commit,一定要谨慎得使用重置功能。Git reset 命令可以用来将HEAD和当前分支指针转移到目标commit、清除commit、将commit的更改移到暂存区、取笑暂存commit的更改。具体如下:
4)备份分支
在最近的commit上创建一个backup分支,当出现错误时,可以返回这些commit。让master分支指向backup分支所指向的同一个commit,需要将工作目录中删除未commit的更改,然后将backup合并到master。
四、实验总结与体会
1、第一次接触git实验,刚开始就不太懂它是干什么的,也不太知道它是做什么的,开始实验的时候,通过百度或者问同学,才渐渐地能明白了一点点,带着疑惑和不解,慢慢地开始了实验。
2、实验过程中,发现了自己的缺点:不够细心、不够耐心,就是做了一点实验部分后,遇到难题了,然后找了好久还是解决不了,最后就不想做实验了,搁置好多天就不做实验了,觉得自己没有耐心吧,遇到难题就不想做了,以后这方面我需要改改,积极面对难题,解决难题。还有就是自己按照实验步骤来做实验,还是会做错好多遍,没有仔细看,导致自己浪费许多实际。记得印象深刻的是,就是为git配置代码编辑器的时候,没有配置好,导致后面做实验出现错误,然后输了好多遍那个d代码编辑器的地址都是错误的,都有点想放弃,最后在同学的鼓励下,输入最后一遍地址,终于代码编辑器可以自动打开了。
3、还有通过此次实验,发现自己动手能力差,按照实验步骤来做实验,还是做不好实验,这方面今后需要多多加强吧。
4、第一次写博客,没有什么经验,刚开始认为自己不能一下子做完所有实验,怕写的实验报告保存不了,就在Word文档里写,本来想最后写完全部复制到博客里,结果复制的时候,图片不能一下子复制过去,所以只能一个一个将图片复制过去,导致图片的有一点失真,文档重新排版也花了许多时间,吸取教训,下次一定在博客里写。
5、最后通过此次实验,希望自己能够吸取教训,改正一些缺点,不要再下一个实验中出现同样的错误,多多动手。
五、思考题
阅读维基百科和百度百科的Git词条,总结分布式分布式版本控制系统的核心机理。
答: 版本控制系统(CVS)简单理解就是以版本号的形式管理各类文件,它能够详细的记录一个文件从创建到修改到删除等一些生命周期的各类操作是一个管理源代码不同版本的工具,同时能够让你随心所欲的将文件回退到任何一个历史版本。最初都是集中式版本控制系统,经过不断发展,逐渐演变出来了一种新的版本控制系统——分布式版本控制系统。Git就是当前比较流行、适用的分布式版本控制系统。
软件工程实验一 Git代码版本管理的更多相关文章
- 实验一 GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...
- 实验一 GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ini ...
- 实验一Git代码版本管理
GIT代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git ...
- 软工 实验一 Git代码版本管理
实验目的: 1)了解分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...
- 实验1 GIT代码版本管理
(一)实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: (二)实验内容: 1)安装git 2)初始配置git ,git init git sta ...
- 实验一 git代码版本管理
实验目的 1. 了解分布式系统版本管理的核心机理. 2. 熟练掌握 git 的基本指令和分支管理指令. 实验内容 1. 安装 git.2. 初始化配置 git,git init ,git status ...
- 实验一  GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...
- 软件工程 实验一 Git版本管理
实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指 ...
- iOS - Git 代码版本管理
1.Git Git 是用 C 语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容. ...
随机推荐
- random mating
随机交配种群 孟德尔分离(基于diploid and sexual)和随机交配(1.不因突变而改变的规律2.可计算的)是群体遗传学的基础. 随机交配(random mating)指群体中每一个成员与另 ...
- dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性
dom4j 为生成 XML 的文件添加 xmlns(命名空间) 属性 分类: Java2011-06-03 16:14 976人阅读 评论(0) 收藏 举报 xml扩展语言 今天在开发sitemap地 ...
- 项目部署篇之二——linux下安装jdk1.8
1.下载jdk1.8 百度云下载后,直接通过xftp拖到你想放的目录下就行了,实在方便 链接:https://pan.baidu.com/s/1hQl0_3owT776lRO9mHSbXA 提取码:2 ...
- python往mysql数据库中写入数据和更新插入数据
本文链接:https://blog.csdn.net/Mr__lqy/article/details/85719603 1. 连接mysql import pymysql db = pymysql.c ...
- AndroidP推出多项AI功能,会不会引发新的隐私担忧?
让谷歌很"伤心"的是,相比苹果iOS系统的统一,Android系统的碎片化态势实在太严重了.就像已经发布一年多的Android O,其占有率仅有4.6%.主要是因为很多手机厂商都会 ...
- JVM 的内存布局
这是jdk7以后的版本 1. Heap(堆区) Heap OOM 障最主要的发源地, 它存储着几乎所有的实例对象, 堆由垃圾收集器自动回收, 堆区由各子线程共享使用.通常情况下 它占用的空间是所有内存 ...
- python的可迭代对象
今日所得 迭代器 可迭代对象 迭代器对象 for循环内部原理 生成器 生成器表达式 内会函数 面对过程编程 迭代器 迭代就是指更新换代的过程,要重复进行,而且每次的迭代都必须基于上一次的结果. 我们使 ...
- [洛谷P3806] [模板] 点分治1
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果m ...
- FPGA模N计数器的实现
module ModuloN_Cntr(Clock, Clear, Q, QBAR); , UPTO = ;//计数器位数以及模数 input Clock, Clear; :]Q, QBAR; :]C ...
- FPGA 浮点定点数的处理
大纲: 1浮点数的格式指定 2浮点数的运算(加法) 3浮点数加减法器的实现(难于乘除法器的实现) 1. 在FPGA的设计中,浮点数的概念不同于C语言中的定义,这里的浮点数指的是小数点位置会发生变化的 ...