实验一 git代码版本管理

实验一 git代码版本管理

实验目的:

1)了解分布式分布式版本控制系统的核心机理;

2)熟练掌握git的基本指令和分支管理指令;

实验内容:

1)安装git

2)初始配置git,git init statua指令

3)掌握git log,git add,git diff指令

4)掌握git tag git branch,git commit指令

5)掌握git revert指令

试验记录:

1 配置git

#设置你的git用户名

#设置你的git邮箱

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

#对比显示原始状态

2 从头创建仓库

在对 Git 仓库进行 commit 或执行任何其他操作之前,需要一个实际存在的仓库。要使用 Git 新建一个仓库,我们将使用 git init 命令。

init 子命令是"initialize"(初始化)的简称,这个命令很有用

创建的过程中可能涉及如下命令

  • ls - 用来列出文件和目录

  • mkdir - 用来新建目录

  • cd - 用来更改目录

  • rm - 用来删除文件和目录

  • pwd -列出当前目录

创建项目目录

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

目录下可在终端上运行以下命令

 git init

 可以开始使用 git init 命令了!这是最简单的命令之一。你只需在终端上运行 git init。

终端会显示 git init 命令正在运行。该命令会在当前目录下初始化生成一个空的 Git 仓库。

运行 git init 之后,应该会出现一段文字:"Initialized empty Git repository in",后面提示符中出现了matser。运行 git init 命

令会初始化 Git 跟踪所有内容会用到的所有必要文件和目录。

克隆现有仓库

在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL :https://github.com/udacity/course-git-blog-project )

完整命令是:

克隆过程中,第一行是"Cloning into 'course-git-blog-project'…"。Git 正在创建一个目录(名称与我们要克隆的项目一样),

并将仓库放在其中!其余输出结果基本都是验证信息——也就是统计远程仓库的项目数,然后压缩并接收这些项目,并解压。进入course-git-blog-project文件夹,在浏览器中打开 index.html 文件。可用看见已经克隆的blog网页。

判断仓库的状态

git status 是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,以及 Git 所看到的我们仓库的状态。当你第一次使用

Git 时,你应该一直都要使用 git status 命令.你应该习惯于运行任何其他命令之后,都运行下该命令。这样可以帮助你了解

Git 的工作原理,并避免你对文件 / 仓库状态做出不正确的推论。

3 git log

克隆course-git-blog-project 仓库后,使用命令行转到项目的目录下。

你可以看到 git status 的输出结果是:"nothing to commit, working directory clean",可以继续并检出该项目了。在visual studio中打开index.html

输入git log 命令显示仓库中所有 commit 的信息

默认情况下,该命令会显示仓库中每个 commit 的:

  • SHA
  • 作者
  • 日期
  • 消息  

 git log --oneline命令

  • 每行显示一个 commit

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

  • 显示 commit 的消息

git log --stat命令

显示commit中更改以及添加或删除的行数

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

处理太多滚动操作

有两种实现方式!

  • 向 git log 提供你要查看的 commit 的 SHA

  • 使用新的 git show 命令

git log -p fdf5493

通过提供 SHA,git log -p 命令将从这条 commit 开始!无需滚动并逐条查阅!注意,它还会显示在所提供的 SHA 之前提

交的所有 commit 信息。

新命令 git show

git show fdf5493

上行上述示例命令将仅显示最近的 commit。通常,将 SHA 作为最后一个参数提供给命令:

git show 命令将仅显示一个 commit。因此,如果你看不到任何其他 commit,不要惊慌。它只显示一个 commit。git show

命令的输出和 git log -p 命令的完全一样。因此默认情况下,git show 会显示:

  • commit

  • 作者

  • 日期

  • commit 消息

  • 补丁信息

                                                                                                                                                                                                                                                

4 git add& git commit&git diff添加新文件,并使用git status 检查状态

(1)添加新文件,并使用git status检查状态:进入到new-git-project,创建index.html文件,建立js,css文件夹,并在文件下分别建立app.js和app.css文件,文件内容可为空。并用git status查看状态。

(2)暂存文件:使用git add命令将文件从工作目录移到暂存区,工作目录中目前有三个未跟踪文件:index.html;css目录下的app.cs;js目录下的app.js。并用git status查看状态。

(3)提交Commit:安装sublime Text,并运行以下语句进行配置,使得编辑器打开,在编辑器第一行输入Inital commit文本,保存文件并关闭编辑器窗口,提交第一个commit.

使用git commit -m提交第二个commit

(4)git diff:git status 命令告诉我们可以哪些文件被更改了,但是不会显示到底是什么样的更改,git diff却可以。Git diff命令可以用来查看已被加入但未提交的更改,在index.html中将标题从"Expedition"改为"Adventure"。保存文件,然后在终端上运行git diff。

(5) gitignore

5 标签、分支

(1)添加标签:输入以下命令:git tag -a v1.0

删除标签

(2) 创建分支 使用git branch siderbar创建分支,git checkout命令切换分支,切换成功后提示符显示“siderbar”

活跃分支查看:git branch

删除分支:git branch –d

分支实战:

更改1-添加页面颜色:确保位于master分支上,并向css/app.css添加以下内容body{background-color:#00cae4;},将文件添加到暂存区,并将其commit到仓库,在仓库中第一行写Set background color for page,通过 git log检查commit记录。

更改2-添加侧栏:将sidebar分支放在设置页面颜色的commit之前,向该commit添加分支命令,使用git checkout命令切换到新的siderbar分支,运行git log --oneline --decorate,运行 git log --oneline,发现Set background for page没有了。

 更改3-更改master上的标题:切换到master分支并更新页面标题,使用git checkout命令切换到master分支,保存index.html文件并进行commit已将此添加到仓库中,消息写为“Improve site heading for SEO”,提交后用git log --oneline检查。

6 合并

合并:现检查是否位于new-git-project;是否检出master分支;git status输出文本包括working directory clean。合并指令:git merge指令用来合并git分支

7 撤销更改

更改最后一个commit:运行git commit --amend,重新提供commit消息,代码编辑器打开,显示原始的commit消息,纠正错误或重新表述,然后保存文件并关闭,以便采用新信息

(2)向commit中添加忘记文件:git commit --amend能够包含忘记包含文件(或文件更改)。

(3)还原commit:使用git revert命令还原,找到最近的commit的SHA,运行git revert SHA,弹出代码编辑器,确认提供的commit消息。

(4)重置:git reset命令用来重置(清除)commit;使用 --hard 选项清除 commit ;使用 --soft 选项将 commit 的更改移至暂存区;使用 --mixed 选项取消暂存已被 commit 的更改

(5)备份分支:在最近的 commit 上创建一个 backup 分支,因此如果出现错误,可以返回这些 commit;然后运行git reset --mixed HEAD^会把commit中做出的更改一直工作目录中。

小结

        通过老师在学习通里面给的步骤一步一步来操作,能够基本上出现大部分运行结果,学习并掌握了一些基本的git命令,在实验过程中,时常会发生命令结果与要求不符,在查阅资料和同学的帮助下,解决了困难,例如在执行命令时需要确定仓库是否正确,在分支实战中有很多命令多次错误,好在及时修改,完成了任务。总的来说,在第一次实验进行完成之后,我认识到git是一个非常强大的分布式版本控制工具,要经常用git status查询当前状态,避免错误。对于本次实验还要通过课后的进一步巩固和理解整个实验内容。

思考题

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

答:git和其他版本控制系统(如CVS)有不小的差别,git本身关心文件的整体性是否有改变,但多数的版本控制系统如CVS或Subversion系统则在乎文件内容的差异。git拒绝保持每个文件的版本修订关系。因此查看一个文件的历史需要遍历各个history快照;git隐式处理文件更名,即同名文件默认为其前身,如果没有同名文件则在前一个版本中搜索具有类似内容的文件。

git更像一个文件系统,直接在本机上获取数据,不必连线到主机端获取数据。 每个开发者都可有全部开发历史的本地副本,changes从这种本地repository复制给其他开发者。这些changes作为新增的开发分支被导入,可以与本地开发分支合并。

分支是非常轻量级的,一个分支仅是对一个commit的引用。

git是用C语言开发的,以追求最高的性能。git自动完成垃圾回收,也可以用命令git gc --prune直接调用。

git存储每个新创建的object作为一个单独文件。为了压缩存储空间占用, packs操作把很多文件(启发式类似名字的文件往往具有类似内容)使用差分压缩入一个文件中(packfile),并创建一个对应的索引文件,指明object在packfile中的偏移值。新创建的对象仍然作为单独文件存在。repacks操作非常费时间,git会在空闲时间自动做此操作。也可用命令git gc来直接启动repack。packfile与索引文件都用SHA-1作为校验和并作为文件名。git fsck命令做校验和的完整性验证

原文地址:https://www.cnblogs.com/wxqaq/p/12391302.html