实验一 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:转到 https://git-scm.com/downloads下载 Windows 版软件,安装 Git 并选择所有默认选项,安装完毕后,你应该能够在命令行工具中运行 git。如果显示了使用信息,则一切正常!

        (2)在开始使用 Git 之前,需要配置 Git。在命令行工具中运行以下每行,确保所有选项都已被配置好。

# 设置你的 Git 用户名

git config --global user.name "<Your-Full-Name>"

# 设置你的 Git 邮箱

git config --global user.email "<your-email-address>"

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

git config --global color.ui auto

# 对比显示原始状态

git config --global merge.conflictstyle diff3

git config --list

 

 

创建一个目录,叫做 se2020-git-course,在该目录中,创建另一个目录,叫做 new-git-project,使用 cd 命令移到 new-git-project 目录下。

可在终端上运行以下命令:- mkdir -p se2020-git-course/new-git-project && cd $_。在终端上运行 git init。终端会显示 git init 命令正在运行。该命令会在当前目录下初始化生成一个空的 Git 仓库。

 git status 命令将显示很多信息,具体取决于文件状态、工作目录和仓库。运行 git status,可以显示需要知道的信息。

 

示索引文件和当前HEAD提交之间的差异,在工作树和索引文件之间有差异的路径以及工作树中没有被Git跟踪的路径。 第一个是通过运行git commit来提交的; 第二个和第三个是你可以通过在运行git commit之前运行git add来提交的。

git status相对来说是一个简单的命令,它简单的展示状态信息。输出的内容分为3个分类/组。

    通过git log检出项目

    SHA - git log 将显示每个 commit 的完整 SHA。每个 SHA 都是唯一的,因此,我不需要查看整个 SHA。只需知道前 6-8 个字符即可。如果我们能只显示 SHA 的前 5 个左右的字符,是不是会节省一些空间?

    作者 - git log 输出结果显示了每个 commit 的作者!其他仓库可能有多个人协作,因此情况可能不同,但是对于此仓库,只有一个人提交了所有的 commit,因此所有 commit 的作者是一样的。我们需要查看每个 commit 的作者吗?如果我们想隐藏这一信息呢?

    日期 - 默认情况下,git log 将显示每个 commit 的日期。但是我们真的关心 commit 的日期吗?知道日期有时会很重要,但是每次都知道日期并不十分重要,在很多情况下都可以忽略。能否隐藏该信息,以便节省空间?

    commit 消息 - 这是 commit 消息最重要的部分…我们通常都希望看到此信息。

git clone --oneline 命令:

  • 每行显示一个 commit

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

  • 显示 commit 的消息

出现此页面是因为在克隆部分出现问题,百度后解决了。

在代码编辑器中打开该项目。花几分钟时间看看项目,包括 CSS 和 JavaScript 文件,但是重点看一下 HTML 文件。使用git log命令验证信息:

 

git log --oneline

 

 

 

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

运行 git log --stat

总结,--stat 选项用于更改 git log 显示信息的方式:

$ git log --stat

此命令会:

  • 显示被修改的文件

  • 显示添加/删除的行数

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

git log 命令具有一个可用来显示对文件作出实际更改的选项。该选项是 --patch,可以简写为 -p:

$ git log -p

运行该命令并查看显示结果。

-p 选项(和 --patch 选项一样)用来更改 git log 显示信息的方式:

$ git log -p

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

  • 显示被修改的文件

  • 显示添加/删除的行所在的位置

  • 显示做出的实际更改创建 HTML 文件

    首先,创建一个叫做 index.html 的文件,并添加一些起始代码

在终端上运行以下命令,使用 git add 将 index.html 添加到暂存区:

$ git add index.html

运行 git add 命令没有任何输出(同样也没有错误)。如何让 git 告诉我们它执行了什么操作以及添加的 index.html 文件发生了什么呢?git status 就可以告诉我们这些信息,在你对版本控制/命令行工具不是非常熟练的时期,要注重该命令。

 

index.html 文件已暂存。我们再暂存另外两个文件。现在我们可以运行以下命令:

$ git add css/app.css js/app.js

或者使用 git add . 

  要在 git 中提交 commit,你需要使用 git commit 命令,但是先别运行这条命令。运行这条命令将会打开你在第一节课配置的代码编辑器。

有如下显示:

 现在保存文件并关闭编辑器窗口(只关闭面板/标签页还不够,你还需要关闭 git commit 命令打开的代码编辑器窗口)。现在回到终端,能看到类似于以下内容的界面

 git diff

此工具可以在进行提交之前告诉我们已对文件进行了什么样的更改,git status 将告诉我们哪些文件更改了,但是不会显示到底是什么样的更改。

此命令会显示:

  • 已经修改的文件

  • 添加/删除的行所在的位置

  • 执行的实际更改

.gitignore 文件用来告诉 git 不应跟踪的文件。该文件应该放在 .git 目录所在的目录

 

 

 

 

git tag 命令用来标记特定的 commit 。当添加新的 commit 时,标签不会移动。

此命令将:

  • 向最近的 commit 添加标签

  • 如果提供了 SHA,则向具体的 commit 添加标签

git branch 命令用来与 git 的分支进行交互:

它可以用来:
  • 列出仓库中的所有分支名称

  • 创建新的分支

  • 删除分支

checkout 命令

    在进行 commit  时,该 commit 将添加到当前分支上。虽然我们创建了新的 sidebar 分支,但是没有向其添加新的 commit,因为我们尚未切换到该分支。如果我们现在进行 commit 的话,该 commit 将添加到 master 分支,而不是 sidebar 分支。我们已经在演示中看到这一情况,要在分支之间进行切换,我们需要使用 git 的 checkout 命令。

请务必了解该命令的工作方式。运行该命令将:

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

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

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

 总结:git branch此命令用来:

  • 列出本地分支

  • 创建新的分支

  • 删除分支

git revert 命令用于还原之前创建的 commit:

此命令:

  • 将撤消目标 commit 所做出的更改

  • 创建一个新的 commit 来记录这一更改

实验总结与体会:

    这次实验初步认识了git的配置与简单使用方法,进行提交操作时,Git 会保存一个提交对象(commit object)。知道了 Git 保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针。 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。

思考题:

 Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git的功能特性:
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

posted @ 2020-03-03 17:55  纪超超  阅读(125)  评论(0)    收藏  举报