实验一 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之前,我们要先对git进行配置

配置git用户名

git config --global user.name “<ASUS>”

设置git邮箱

git config --global user.email “<484014130@qq.com>”

确保git输出内容带有颜色标记

git config --global color.ui auto

注意空格

 

2.创建仓库

   在对git仓库进行commit或执行任何其他操作之前,需要存在一个实际存在的仓库。所以我们先要用git新建一个仓库。

(1)创建项目目录

   再D盘中创建一个文件夹LWgit,在该文件夹中创建一个目录叫se2020-git-course,再在这个目录中创建另一个目录new-git-project,最后使用cd命令移到new-git-project目录下

  mkdir -p se2020-git-course/new-git-project && cd $_

 

(2)创建仓库

   使用git init命令在当前目录下生成一个空的git仓库

(操作过程中这一步忘记截图了)

 

(3)克隆现有仓库

   使用git clone命令来克隆一个现有仓库,在克隆之前要先确保命令工具定位于正确的目录下,确保终端的当前工作目录不在git仓库中

   git clone https://github.com/udacity/course-git-blog-project

   

 

(4)判断克隆仓库的状态

   git status 是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。因此可利用 git status 命令来随时查看当前仓库的状态。代码及运行结果如下图:

 

3.git log

(1)git log命令

    在使用git log命令之前,我们要先知道git log命令的作用。git log命令用于显示仓库中所有commit的信息,如:SHA、作者、日期、消息

    git 使用命令分页器less浏览所有信息,重要快捷键如下:

(1)J或下方向键:要按行向下滚动

(2)K或上方向键:要按行向上滚动

(3)空格键或Page Down:要按页向下滚动

(4)B或Page Up:要按页向上滚动

(5)Q:退出

 

(2)git log --oneline

   git log --online用来更改仓库信息的显示方式。

    该命令显示的信息:

(1)每行显示一个commit

(2)显示commit的SHA的前七个字符

(3)显示commit的消息

 

(3)git log --stat

    git log --stat命令可以用来显示 commit 中更改的文件以及添加或删除的行数。(stat 是“统计信息 statistics”的简称)

  该命令的显示格式通常为:

(1)显示被修改的文件

(2)显示添加/删除的行数

(3)显示一个摘要,其中包含修改/删除的总文件数和总行数

 

(4)查看更改

    使用git log --stat命令可以看出修改了那些文件以及添加或删除了多少行代码,如上图中 7 files changed, 91 insertions, 58 deletions就是修改了7个文件,增加了91行代码,删除了58行代码。

    使用git log -p命令则可以让我更清楚的看到修改、增加或删除了哪些内容。

(5)git log -p

    git log -p命令具有一个可用来显示对文件作出实际更改的选项

   此命令会向默认输出中添加以下信息:

(1)显示被修改的文件

(2)显示添加/删除的行所在的位置

(3)显示作出的实际更改

(6)git show

      通过以上的各个命令的实验过程会发现,上面的命令在执行结束之后需要在补丁(修改)输出中不断向下滚动,以便找到正确的 commit 并查看其信息。能够显示特定 commit 的详情,而不用关心仓库中的所有其他内容。git show 命令通常将 SHA 作为最后一个参数提供给命令。(例如:git log -p fdf5493)git show 命令的输出和 git log -p 命令的完全一样。因此默认情况下,git show 也会显示:commit、作者、日期、commit 消息、补丁信息。(操作过程中忘记截图了)

 

4.git add && git commit && git diff

(1)添加新文件,并用git status检查状态

 ·  创建HTML文件(具体代码未截图)

 ·  建立js和css文件夹,并在文件夹下分别建立app.js和app.css文件,文件内容为空

·  用git status命令检查状态

 

(2)暂存文件

    在终端上运行以下命令将index.html添加到暂存区

   git add index.html

(截图损坏了)

  与添加index.html相同,我们将目录下的其他文件利用 git add 命令也一同放入到暂存区中。

 

(3)提交commit

    要在git中提交commit ,需要使用git commit命令,但在运行这条命令之前需要先配置代码编辑器。

    git config --global core.editor ““C:\Program Files\Sublime Text 3\sublime_text.exe” -n -w”

    

   然后使用命令git commit进行提交

 出现如上图界面则提交成功!

 

(4)添加更改

    在index.html中添加一些代码(代码略),然后git status检查状态

(1)使用git add命令将文件移到暂存区,并使用git status验证文件是否位于暂存区

(2)提交第二个commit

 

(5)git diff

    git diff可以在进行提交之前告诉我们已对文件进项了什么样的更改。该命令的显示格式通常为:

(1)已经修改的文件

(2)添加/删除的行所在的位置

(3)执行的实际更改

 

(6)gitignore

      在我们的项目目录中如果有其他文件并且我们并不想将其提交到仓库中这是如果再使用 git add .命令来添加所有文件就会非常不方便。遇到这种想将某个文件保留在项目的目录结构中并且确保它不会意外地提交到项目当中,可以使用名称特殊的文件 .gitignore。我们将希望忽略的文件(例如:LW.docx)写出到  .gitignore 中。当面对许多文件需要忽略的情况时可以另外使用通配符来配合完成。通俗的说,git ignore 命令的功能就是告诉 git 不应跟踪哪些文件。代码及运行结果如下图:

+

 

5.标签和分支

(1)git tag 标签

    进入之前建立的new-git-project项目文件中,然后使用git log输出结果

 

(2)git tag

       注意上图所显示的结果(只需注意 SHA 和 commit 消息)我们将使用 git tag 命令与仓库的标签进行交互。在终端输入:git tag -a v1.0。该条命令将打开代码编辑器,并等待用户为标签输入信息。我们输入"Ready for content"作为tag。上面采用的命令带有 -a 打开编辑器为一个带注释的标签。我们也可以不适用 -a 此时它将创建一个轻量级的标签。建议使用前者即带注释的标签。验证标签:保存并退出编辑器后,终端界面上什么也不会显示。我们只需要往项目中输入 git tag 命令就可以知道我们添加了的所有标签。代码及运行结果如下图:

 

(3)删除标签 

     如果我们将标签消息中的某个字打错了或标签名称打错了(输入 v0.1,而不是 v1.0)最简单的方法是删除这个标签并重新创建。可以通过输入 git tag -d 命令来删除 这个错误的标签名(例如:git tag -d v1.0)。(操作过程中忘记截图了)

 

(4)向以前的commit添加标

     运行git tag -a v1.0将为最近的commit添加标签,如果想向仓库中很久之前的commit添加标签则需要提供添加标签的commit的SHA即可。

     先查询历史SHA git log --oneline,查找已经commit的SHA

    由图知道SHA为5998b78。运行如下命令:

    git tag -a v1.0 5998b78(未截图)

 

(5)git branch分支

     git 中的分支非常灵活,能够实现一些很强大的功能。而git branch 命令则是用来与 git 的分支进行交互的。通常包括:列出仓库中的所有分支名称、创建新的分支、删除分支。如果我们只输入 git branch 命令,终端将列出仓库中的所有分支。代码及运行结果如下图:

   创建分支:我们只需要使用 git branch 命令并提供要创建分支对应的名称。但是同时需要注意的是新创建的分支它不是当前系统分支。提示符显示的才是当前分支master。以创建 sidebar 的分支为例,代码及运行结果 如下图:

   切换分支:要使用新创建的 sidebar 分支,我们需要使用 git checkout 命令手动的切换到该分支。

   切换命令的工作方式如下:

(1)从工作目录中删除给git 跟踪的所有文件和目录(git跟踪的文件存储在仓库中,因此什么也不会丢失)

(2)转到仓库,并提取分支指向的commit所对应的所有文件和目录

    仔细的观察可以发现当执行完 git checkout 命令之后提示符会开始显示 sidebar。我们可以使用 git log --oneline 命令来清晰的观察提示符中的有关分支的有用信息。特殊指示符"HEAD"具有一个指向 sidebar 分支的箭头。它指向 sidebar 是因为 sidebar 分支是当前分支,现在提交的任何 commit 将添加到 sidebar 分支。代码及运行结果 如下图:

 

(6)活跃分支

     提示符将显示活跃分支。但这是我们对提示符进行的特殊自定义,如果你使用的是不同的计算机,判断活跃分支的最快捷方式是查看git branch命令的输出结果。活跃分支名称旁边会显示一个星号。

 

(7)删除分支

     如果我们不再需要某个分支时我们可以使用 git branch -d 命令来完成。但时 git 中对分支的删除有很严格的限制,只有满足了这些限制删除操作才能完成。

(1)如果某个将要删除的分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是将要被删除的分支所独有的),git 不会删除该分支。

(2)如果我们创建了 sidebar 分支并向其添加了 commit 然后尝试使用 git branch -d 命令删除该分支。git 不会让你删除该分支,因为我们无法删除当前所在的分支。

(3)如果我们切换到 master 分支并尝试删除 sidebar 分支,git 也不会让你删除,因为 sidebar 分支上的新 commit 会丢失!如果要强制删除则需要使用大写的 -D ,即 git branch -D 。

 

(8)高效分支

     我们要在new-git-project项目中进行操作。该项目具有index.html(具体内容略)、css/app.css(空文件)、js/app.js(空文件)

     为开始后面的实验,先执行以下操作:

·  删除前面建好的sidebar分支

·  所有文件暂存并提交到仓库

·  切换到master分支

·  运行git status,确认出现 working tree clean 或 working directory clearn。

 

(9)分支实战

     现在,所有代码都位于 master分支(默认分支)上。我们通过以下操作利用分支进行工作:

  • 向分支中添加内容

  • 创建新的分支

  • 在分支之间切换

     让我们使用分支完成以下更改:

   (1)在 master 分支上 - 向页面添加默认颜色

   (2)创建一个 sidebar 分支 - 为页面创建侧栏

   (3)在 master 分支上 - 更改页面的标签

   (4)在 sidebar 分支上 - 向侧栏中添加更多内容

   (5)创建一个 footer 分支 - 向脚注中添加社交链接

更改1 一 添加页面颜色 

      确保位于master分支上,向css/app.css添加内容(内容略),保存文件,然后将该文件添加到暂存区,并将其commit到仓库,commit内容写“Set  background  color  for  page”,通过git log检查commit记录

更改2  一  添加侧栏

     创建一个 sidebar 分支为页面创建侧栏:假定我们并不确定是否喜欢新的背景色。因此我们要将 sidebar 分支放在设置页面颜色的 commit 之前。以确保我们更容易的更改操作。根据上图中 git log --oneline 命令执行的结果来看,我们将 sidebar 分支设置5998b78SHA 为上(即运行 git branch sidebar 5998b78)。之后运行 git checkout 命令切换到新的 sidebar 分支上再运行 git log --oneline。代码及运行结果如下图:

更改3  一  更改master上的标题

      切换到 master 分支并更新页面标题。使用 git checkout命令切换到 master分支。现在将页面的 <h1> 标题从"Expedition"改为"Adventure"。现在该保存 index.html 文件并进行 commit 以将此更改添加到仓库中。( commit 消息"Improve site heading for SEO"),记住提交后用git log --oneline 检查。

 

 

 

(10)同时查看所有分支

       到目前为止我们已经在三个不同的分支上进行了多项更改。我们知道可以使用 git log 命令来查看分支的各种信息但是去只能局限于当前的分支。这里我们可以使用 git log 的几个新的选项。--graph 选项将条目和行添加到输出的最左侧,显示了实际的分支。--all选项会显示仓库中的所有分支。运行此命令将显示仓库中的所有分支和 commit。代码及运行结果如下图:

 

6.合并

     当你在主题分支上做出更改后,如果觉得不想要该分支上的更改,则可以删掉该分支,或者你决定要保留更改,则可以将该分支上的更改与其他分支上的更改进行合并。git 可以自动将不同分支上的更改合并到一起。这种分支和合并功能正是 git 的强大之处!你可以在分支上做出小的或大的更改,然后使用 git 合并这些更改。代码及运行结果如下图:

     合并指令:git merge sidebar

     发生合并时,git 将:

(1)查看将合并的分支;

(2)查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit;

(3)将单个分支上更改的代码行合并到一起、提交一个 commit 来记录合并操作。

 

合并冲突

     大部分情况下,git 将能够成功地合并分支。但是,有时候 git 无法完全自动地进行合并。合并失败时,就称为合并冲突。大部分情况下,git 将能够成功地合并分支。但是,有时候 git 无法完全自动地进行合并。合并失败时,就称为合并冲突。

     当相同的行在要合并的不同分支上做出了更改时,就会出现合并冲突。git 将在合并途中暂停,并告诉你存在冲突,以及哪些文件存在冲突。要解决文件中的冲突需要:找到并删掉存在合并冲突指示符的所有行、决定保留哪些行、保存文件、暂存文件、提交 commit。

 

解决合并冲突

    git 使用合并冲突指示符来告诉你两个不同分支上的哪些行导致了合并冲突,以及原始行是什么。要解决合并冲突,你需要:

(1)选择保留哪些行

(2)删掉所有带指示符的行

 

7.撤销更改

(1)更改最后一个commit

    git  commit  --amend

(未截图)

 

(2)还原commit

      当我们创建了一个包含一些更改的 commit,我们可以使用 git revert 命令来还原它

       git  log --oneline --graph --all

 

 

(3)还原git  revert

     当我们创建了一个包含一些更改的 commit,我们可以使用 git revert 命令来还原它。

 

(4)重置git  reset

       我们通常使用 git reset 命令用来重置(清除)commit。主要包括:将 HEAD 和当前分支指针移到目标 commit、清除 commit、将 commit 的更改移到暂存区、取消暂存 commit 的更改。git 根据所使用选项来判断是清除、暂存之前 commit 的更改,还是取消暂存之前 commit 的更改。这些选项包括:使用 --hard 选项清除 commit、使用 --soft 选项将 commit 的更改移至暂存区、使用 --mixed选项取消暂存已被 commit 的更改。

 

(5)备份分支

       使用 git reset 命令将清除当前分支上的 commit。因此,如果你想跟着操作接下来出现的所有重置操作,需要在当前 commit 上创建一个分支,以便用作备份。在进行任何重置操作之前,通常会在最近的 commit 上创建一个 backup 分支,因此如果出现错误,可以返回这些 commit:

 

实验中遇到的问题

(1)在克隆时终端的当前工作目录在git仓库中,后来发现后就重新做了一遍

(2)由于粗心git编辑器一开始路径设置出错

(3)再删除分支时总是删除失败,后来才发现我删除的是我所在的分支,解决方法是只需要使用checkout命令换到另一个分支

 

实验总结与体会

       Git是一个版本管理的工具,它拥有很强的性能。在本次实验中,我们由浅逐渐到深的学习了这个软件的一些基本的操作,通过每个不联系的代码学习了Git这个工具的一些功能。这次的实验让我真正的认识到了Git这个工具的便捷之处,它可以帮助人们有效的、快捷的、高效的控制从很小到非常大的项目的版本。Git可以使一个项目在某处产生分支来进行不同的修改,同时如果项目发生错误它也可以使项目快速的回到上一个版本从而避免错误。这次实验只学习了Git部分的功能,但这也需要课后不断的去练习才能熟练的掌握。整个实验围绕 gIt 的各种命令的实际应用背景展开,通过在一个个实例中去深刻理解命令的用途及含义。这种需求推动知识的学习方法让我在解决一个又一个实际问题中既获得了成就感也学会了各种命令。但是这次的实验是验证型实验整体没有太高的难度但是需要花一定的时间去完成每一个分模块,特别是当自己运行的结果与自己预期的不同时需要花费大量的时间去查找错误原因。所以从整个实验过程来看,虽然实验结束了但是各种知识点也仅仅的有所了解,只有通过课后的进一步巩固强化才能更好的吸收和消化实验的真个内容。

 

思考题

阅读维基百科和百度百科的Git词条,总结Git是分布式版本控制系统

答:分布式版本控制系统不需要服务器端软件的支持,使源代码的发布和交流及其方便。每个开发者可以通过克隆来拷贝一个Git仓库到本地机器中,开发者可以根据不同的目的创建不同的分支来修改代码,当需要多个人进行协作时,只用将开发者之间的修改推送给对方。分布式版本控制系统没有中央服务器,每个人的电脑上都是一个完整的版本库,因此不需要联网,可以离线进行修改。且系统具有很强的安全性,因为在每个人的电脑都有一个完整的版本库,若一个人的发生错误只需从其他人那里复制一个,而集中式版本控制系统的中央服务器损坏则所有人都没法使用。

posted on 2020-02-25 16:50  我以为你们都在  阅读(254)  评论(0编辑  收藏  举报

导航