软件工程实验一 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,输出结果如下图:

软件工程实验一 Git代码版本管理

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时,出现如下图错误:

软件工程实验一 Git代码版本管理

百度上说:clone时不能用绝对路径,只能写相对于Git用户home的相对路径。后来发现自己运行应用程序错误,原先选的 是第二个出现错误,正确应该选第一个运行。正确结果如下图:

软件工程实验一 Git代码版本管理

 由于“.git”文件是隐藏文件,需要要在选择“查看”,然后选中“隐藏的项目”,选中后,出现“.git”文件。正确运行git init时,会在当前目录下初始化生成一个Git仓库。如下图所示:

软件工程实验一 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代码版本管理

   查看错误发现密码输入错误,再对比其他同学实验结果发现,当前目没有选择,所以选择当前目录Git下,输入正确的密码后,运行结果如下图:

软件工程实验一 Git代码版本管理

软件工程实验一 Git代码版本管理

 3)判断现有仓库的状态

   在当前course-git-blog-project目录下,使用命令:git status。结果如下图:

软件工程实验一 Git代码版本管理

  由于没有新的文件、没有对文件作出更改、暂存区没有任何需要commit的内容、更改或操作。(这是已经具有commit的仓库中运行git status的状态)

  接下来,将在没有commit的仓库中运行git status,结果如下图:

软件工程实验一 Git代码版本管理

问题:如何证明此仓库尚无任何commit?

解:运行命令git log,结果出现下图,则证明此仓库尚无任何commit。

软件工程实验一 Git代码版本管理

4、git log命令

git log命令用于显示仓库中所有commit的信息,默认情况下,该命令会显示仓库中每个commit的:SHA,作者,日期,消息。

软件工程实验一 Git代码版本管理

 1)git clone –online命令

   E  每行显示一个commit

    E  显示commit的SHA的前7个字符

    E  显示commit的消息

软件工程实验一 Git代码版本管理

 2)git log --stat命令

   可以用来显示commit中更改的文件以及添加或删除的行数。同时还会显示一个摘要,其中包含修改/删除的总文件数。

软件工程实验一 Git代码版本管理

    注意:在查看git log 输出时,需要用D键向下滚动半个页面,而用U键可以向上滚动半个页面。

 3)git log -p命令

  可用来显示对文件作出实际更改的选项,即此命令在默认情况下会显示被修改的文件、显示添加/删除的行所在的位置、显示做出的实际更改。

软件工程实验一 Git代码版本管理

 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代码版本管理

      从图中可以看出,git没有跟踪刚刚建立的文件们。

 2)暂存文件:git add命令

    要将所有文件提交到仓库中,首先需要将这些文件从工作目录移到暂存区。使用命令git add index.html、git add app.js/app.css,或者使用命令git add . (暂存剩余的文件)。再用git status命令查看,结果如下图:

软件工程实验一 Git代码版本管理

  注意:git rm –cached与shell的rm命令不同,git rm –cached不会破坏任何属于你的文件,它只是从暂存区删除了文件。

 3)提交首个commit

  使用git commit命令,来提交commit,编辑器会自动打开,界面如下:

软件工程实验一 Git代码版本管理

   在编辑器首行输入:Initial commit,保存,关闭编辑器,回到中断,出现下图:

软件工程实验一 Git代码版本管理

   由于之前提交过一次,忘记保存,是有如下类似结果显示的:

软件工程实验一 Git代码版本管理

   此处,可以使用-m选项绕过编辑器,可以不用等待打开编辑器后再输入信息,可以直接在命令行中使用-m 选项传入信息。(适用情况:要编写的提交说明很简短)

 4)第二个commit-添加更改

  将index.html文件进行添加修改,使用git status查看如下:

软件工程实验一 Git代码版本管理

接着使用git add命令将文件移到暂存区,并使用git status验证文件是否位于暂存区。最后使用git commit命令提交commit,并添加说明Add header to blog.结果如下:

软件工程实验一 Git代码版本管理

 5)git diff命令

  此命令可以用来查看已经被加入但是尚未提交的更改。即可以显示已经修改的文件、添加/删除的行所在的位置以及执行的实际更改。在index.html中将标题从“Expedition”改为“wanghui”,保存文件,然后在终端运行git diff命令。结果如下:

软件工程实验一 Git代码版本管理

 6)gitignore命令

    如果你想将某个文件保留在项目的目录结构中,但是确保它不会意外地提交项目中,可以使用特殊文件:.gitignore,将此文件添加到项目的根目录中,列出希望 git ignore(忽略)的文件名,git将会忽略这些文件。

  ①新建文档:project.docx,用touch .gitignore命令生成.gitignore文件,并将此文件名保存在.gitignore文件中。

软件工程实验一 Git代码版本管理

  ②输入git status命令,查看如下:

软件工程实验一 Git代码版本管理

    观察图可以发现,文件还是被放在暂存区,说明出现错误。经过重新来一次,出现结果如下:

软件工程实验一 Git代码版本管理

    观察图发现,Word文件已不再列为未跟踪文件,但是列出来新的“.gitignore”的文件。“.gitignore”文件用来告诉git不应该跟踪的文件。

6、标签、分支

 1)git tag标签

  ①git tag命令

  在Git仓库文件中,使用git tag命令与仓库的标签进行交互,输入:git tag -a v1.0,结果如下图,同时编辑器会自动打开,并在第一行输入“Ready for content”作为tag。

软件工程实验一 Git代码版本管理

  ②验证标签

   保存并退出编辑器,在终端输入:git tag,命令行会显示仓库中的所有标签。

软件工程实验一 Git代码版本管理

    使用git log可以查看标签位于仓库中的什么位置,如下所示:

软件工程实验一 Git代码版本管理

  ③删除标签

    当标签消息中的某个字打错了,或标签名打错了,可以通过删除这个标签并重新创建来修正这个错误。

  方法:可以通过输入-d选项(表示delete删除)加上标签名来删除git标签,如下图所示:    

软件工程实验一 Git代码版本管理

 2)git branch分支

  ①git branch命令

   可以用来列出仓库中的所有分支名称、创建新的分支、删除分支。

软件工程实验一 Git代码版本管理

   如上图所示,显示了master分支。

  ②创建分支

若想创建一个名为“sidebar”的分支,运行命令:git branch sidebar。

软件工程实验一 Git代码版本管理

  ③git checkout命令

  使用git checkout命令进行分支转换,即从master分支转换到sidebar分支。

软件工程实验一 Git代码版本管理

此命令的工作方式:从工作目录中删除git跟踪的所有文件和目录(git跟踪的文件存储在仓库中,因此不会丢失)、转到仓库,并提取分支指向的commit所对应的所有文件和目录。

    理解:此命令将删除master分支中的commit引用的所有文件,它会将这些文件替换为sidebar分支中的commit引用的文件。

  提示符中的分支信息很有用,但是最清晰的查看方式是查看git log的输出结果。

软件工程实验一 Git代码版本管理

   ④活跃分支

  判断活跃分子的最快速方式是查看git branch命令的输出结果。

软件工程实验一 Git代码版本管理

  ⑤删除分支

  若想要删除sidebar分支,则需输入命令:git branch -d sidebar.

   注意:无法删除当前所在的分支,因此想要删除sidebar分支,需要切换到master分支,或者创建并切换到新的分支。若需要强制删除,需要使用大写的D选项,即git branch -D sidebar。

⑥高效分支

下载实验内容的index.html文件(这里为防止重复,命名为1index.html)。删除前面建好的sidebar分支、所有文件暂存并提交仓库中、切换到master分支,运行git status。观察结果,出现working tree clean。

软件工程实验一 Git代码版本管理

3)分支实战

  ①添加页面颜色(确保位于master分支上),并向css/app.css添加以下内容:

软件工程实验一 Git代码版本管理

   保存文件,进行如下操作:

软件工程实验一 Git代码版本管理

   ②添加侧栏

  通过向html文件添加实验内容代码,该代码将为页面添加一个侧栏。注意:此时不要修改css文件,否则会出现“合并冲突”。接着进行如下操作:

软件工程实验一 Git代码版本管理

  ③更改master上的标题

    将页面的标题从“Expedition”改成“Adventure”,进行如下操作:

软件工程实验一 Git代码版本管理

  ④同时查看所有分支

软件工程实验一 Git代码版本管理

7、合并

将分支上的更改与其他分支上的更改合并。发生合并时,git将查看将合并的分支、查看分支的历史记录并寻找两个分支的commit历史记录中都有的单个commit、将单个分支上更改的代码行合并到一起、提交一个commit来记录合并操作。

撤销合并命令:git reset --hard HEAD^

  1)合并指令:git merge

   在master分支中,输入命令:git master sidebar,提交commit,结果如下:

软件工程实验一 Git代码版本管理

 2)合并冲突

合并失败时,就成为合并冲突。如果完全相同的行在不同的文件中更改了,将产生合并冲突。

  ①制造合并冲突:在两个不同的分支上更改同一页面的标题。

   在master分支上更改标题,将“Adventure”改成“Quest”,更改后保存文件并commit到仓库。

软件工程实验一 Git代码版本管理

   在该commit创建一个heading-update分支,使用git –oneline –graph –all 查看。

软件工程实验一 Git代码版本管理

   切换到heading-update分支更改标题,将“Adventure”改成“Crusade”,保存文件,并将文件commit到仓库。

软件工程实验一 Git代码版本管理

   切换到master分支,合并两个分支,产生合并冲突,如下:

软件工程实验一 Git代码版本管理

   观察图发现,并没有发生合并冲突,通过重新操作,出现下图:

软件工程实验一 Git代码版本管理

    反思自己,总是出现这个错误,感觉自己太不细心,以后多多注意,要有耐心做实验或者动手

可以使用git status命令,知道哪里存在合并冲突。

软件工程实验一 Git代码版本管理

 3)合并冲突指示符

   用代码编辑器打开1index.html 文件,出现合并冲突符。

软件工程实验一 Git代码版本管理

 4)解决合并冲突

    将标题代码改成如下图所示:

软件工程实验一 Git代码版本管理

   保存文件,并将文件commit到仓库中。

软件工程实验一 Git代码版本管理

8、撤销更改

 1)更改最后一个commit

   使用命令:git commit –amend,结果如下:

软件工程实验一 Git代码版本管理

  编辑器自动打开,显示出原始commit消息,修改需要改的地方,然后保存文件并打开编辑器。

 2)还原commit,使用git revert命令:将撤销目标commit所做出的更改、创建一个新的commit来记录着一个更改。

软件工程实验一 Git代码版本管理

 3)重置

  重置(reset)不同于还原(revert),会清除commit,一定要谨慎得使用重置功能。Git reset 命令可以用来将HEAD和当前分支指针转移到目标commit、清除commit、将commit的更改移到暂存区、取笑暂存commit的更改。具体如下:

软件工程实验一 Git代码版本管理

 4)备份分支

  在最近的commit上创建一个backup分支,当出现错误时,可以返回这些commit。让master分支指向backup分支所指向的同一个commit,需要将工作目录中删除未commit的更改,然后将backup合并到master。

软件工程实验一 Git代码版本管理

四、实验总结与体会

  1、第一次接触git实验,刚开始就不太懂它是干什么的,也不太知道它是做什么的,开始实验的时候,通过百度或者问同学,才渐渐地能明白了一点点,带着疑惑和不解,慢慢地开始了实验。

2、实验过程中,发现了自己的缺点:不够细心、不够耐心,就是做了一点实验部分后,遇到难题了,然后找了好久还是解决不了,最后就不想做实验了,搁置好多天就不做实验了,觉得自己没有耐心吧,遇到难题就不想做了,以后这方面我需要改改,积极面对难题,解决难题。还有就是自己按照实验步骤来做实验,还是会做错好多遍,没有仔细看,导致自己浪费许多实际。记得印象深刻的是,就是为git配置代码编辑器的时候,没有配置好,导致后面做实验出现错误,然后输了好多遍那个d代码编辑器的地址都是错误的,都有点想放弃,最后在同学的鼓励下,输入最后一遍地址,终于代码编辑器可以自动打开了。

3、还有通过此次实验,发现自己动手能力差,按照实验步骤来做实验,还是做不好实验,这方面今后需要多多加强吧。

4、第一次写博客,没有什么经验,刚开始认为自己不能一下子做完所有实验,怕写的实验报告保存不了,就在Word文档里写,本来想最后写完全部复制到博客里,结果复制的时候,图片不能一下子复制过去,所以只能一个一个将图片复制过去,导致图片的有一点失真,文档重新排版也花了许多时间,吸取教训,下次一定在博客里写。

5、最后通过此次实验,希望自己能够吸取教训,改正一些缺点,不要再下一个实验中出现同样的错误,多多动手。

五、思考题

    阅读*和百度百科的Git词条,总结分布式分布式版本控制系统的核心机理。

答: 版本控制系统(CVS)简单理解就是以版本号的形式管理各类文件,它能够详细的记录一个文件从创建到修改到删除等一些生命周期的各类操作是一个管理源代码不同版本的工具,同时能够让你随心所欲的将文件回退到任何一个历史版本。最初都是集中式版本控制系统,经过不断发展,逐渐演变出来了一种新的版本控制系统——分布式版本控制系统。Git就是当前比较流行、适用的分布式版本控制系统。

 

上一篇:Git 初学者使用指南及Git 资源整理


下一篇:实验一  GIT 代码版本管理