软件工程 实验一 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 指令
实验记录:
4.1.3 初始配置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
4.1.4 从头创建仓库
git init
创建一个目录,叫做 se2020-git-course,在该目录中,创建另一个目录,叫做 new-git-project,使用 cd 命令
移到 new-git-project 目录下。
可以开始使用 git init 命令了!这是最简单的命令之一。你只需在终端上运行 git init。
终端会显示 git init 命令正在运行。该命令会在当前目录下初始化生成一个空的 Git 仓库。
克隆现有仓库
在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL)。
首先需要验证终端位置,在克隆任何内容之前,确保命令行工具已定位于正确的目录下。输入 pwd 输出工作目录,则可以
显示当前目录。输入命令 git clone,然后输入你要克隆的 Git 仓库的路径:git clone https://github.com/udacity/course-git-
blog-project。注意:git 终端上要显示百分之百才算克隆成功。
在所克隆的文件目录中可以找到你克隆的blog网页。
git status 是了解 Git 的核心所在。它将告诉我们 Git 正在考虑什么,
以及 Git 所看到的我们仓库的状态。当你第一次使用 Git 时,你应该一直都要使用 git status 命令.你应该习惯于运行任何
其他命令之后,都运行下该命令。这样可以帮助你了解 Git 的工作原理,并避免你对文件 / 仓库状态做出不正确的推论。
4.1.5 git log
git log 命令用于显示仓库中所有commit的信息。
默认情况下,该命令会显示仓库中每个 commit 的:
SHA,作者,日期,消息。
注意:执行该命令后显示以下界面,按q可返回终端。
git log --oneline 用来更改仓库信息的显示方式。
每行显示一个 commit
显示 commit 的 SHA 的前 7 个字符
显示 commit 的消息
The git log 命令有一个选项可以用来显示 commit 中更改的文件以及添加或删除的行数。该选项为 --stat。
运行 git log --stat
git log -p 通过提供 SHA,git log -p 命令将从这条 commit 开始!无需滚动并逐条查阅!注意,它还会显示在
所提供的 SHA 之前提交的所有 commit 信息。
git show git show 命令将仅显示一个 commit。因此,如果你看不到任何其他 commit,不要惊慌。它只显示一
个 commit。git show 命令的输出和 git log -p 命令的完全一样。
4.1.6 git add&git commit&git diff
git add
使用git add可以将一个文件添加到暂存区,用git status查看后发现输出结果中出现了全新的区域:“Change to be
committed”区域!这个区域显示了位于暂存区的文件。
每次提交之后都要及时查看。
建立html,js,css格式的文件可以在终端输入touch 文件名。
git commit
想要在git中提交以commit,需要使用git commit命令,然后会打开相应的配置好的编辑器,此时终端处于冻结状态,等待在
sublime中输入信息。在代码编辑器的首行输入Initaial commit,保存之后完成提交。如果你要编写的提交说明很简短,不想等
打开代码编辑器后之后再输入信息,可以直接在命令行中使用 -m 选项传入信息。
现在保存文件并关闭编辑窗口。回到终端,可以看到以下界面。
git diff
此工具可以在进行提交之前告诉我们已对文件进行了怎么样的更改,git diff命令就是用来查找此类更改信息的,
和运行git log -p的结果一样,因为git log -p其实就是在后台使用了git diff。
git diff命令会显示:
1.已经修改的文件
2.添加/删除的行所在的位置
3.执行的实际更改
gitignore
.gitignore文件用来告诉git不应该跟踪的文件,该文件应该放在 .git目录所在的目录。如下图,想把名为project的文档
放在目录中,但是不会被存放在仓库中,就可以同gitignore解决,将project.docx添加到 .gitignore文件中,然后运行
git status并查看输出结果。
4.1.7 标签和分支
git tag标签
在终端输入 git log,则显示目前的结果信息。
接下来使用 git tag 命令与仓库的标签进行交互,输入 git tag -a v1.0 就可以打开代码编辑器(在命令中尽量使用
-a 选项,该选项告诉 git 创建一个带注释的标签,如果没有该选项则提供的是一个的轻量级标签),建议使用带注
释的标签,因为他们包含了大量的额外信息。保存退出编辑器后,在终端输入 git log ,命令行会显示所有的标签。
这位就是标签
向以前的commit中添加标签也特别方便,只需要提供添加标签的commit的SHA即可。例如 git tag -a v1.0 eff5d50。
git branch 分支
git branch 用来创建分支
git checkout 用于分支间的切换
git branch 还可以判断活跃分支,活跃分支前带星号
git branch -d sidebar 用来删除分支
在 master 分支上 - 向页面添加默认颜色
创建一个 sidebar 分支 - 为页面创建侧栏
在 master 分支上 - 更改页面的标题
在 sidebar 分支上 - 向侧栏中添加更多内容
创建一个 footer 分支 - 向脚注中添加社交链接、
4.1.8 合并
将分支组合到一起称为合并。git 可以自动将不同分支上的更改合并到一起。这种分支和合并功能正是 git 的强大之处!
你可以在分支上做出小的或大的更改,然后使用 git 合并这些更改。
发生合并时,git 将:
-
查看将合并的分支
-
查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit
-
将单个分支上更改的代码行合并到一起
-
提交一个 commit 来记录合并操作
git merge <other-branch> 用来合并标签中的其他分支。
我在执行合并操作时界面显示 Already up to date,说明当前分支和master分支代码不同步,于是我进行了分支切换,用
master去做我的分支,问题就得到了解决。
合并冲突:
当相同的行在要合并的不同分支上做出了更改时,就会出现合并冲突。git 将在合并途中暂停,并告诉你存在冲突,
以及哪些文件存在冲突。要解决文件中的冲突:找到并删掉存在合并冲突指示符的所有行,决定保留哪些行,
保存文件,暂存文件,提交 commit。
4.1.9 撤销更改
如果你的工作目录没有内容(也就是仓库中没有任何未 commit 的更改),那么运行 git commit --amend 将使你能够
重新提供 commit 消息。代码编辑器将打开,并显示原始 commit 消息。只需纠正拼错的单词或重新表述即可!然后保
存文件并关闭编辑器,以便采用新的 commit 消息。
git revert
git revert 命令,用来还原更改的该commit。
此命令:
-
将撤消目标 commit 所做出的更改
-
创建一个新的 commit 来记录这一更改
git reset
git reset<reference-to-commit>为重置命令,一定要谨慎使用 git 的重置功能。这是少数几个可以从仓库中清除 commit 的命令。
如果某个 commit 不再存在于仓库中,它所包含的内容也会消失。
实验总结与体会:
通过此次实验我学会了关于 git 的一系列操作,在执行具体的操作之前需要一个实际的仓库,而且执行
命令之前要将工作目录切换到自己想要的目录下。在执行克隆操作是要使所有资源到克隆好才可以往下执
行其他操作。每条命令都有它单独的功能,要牢牢掌握,在进行分支操作时要辨清分支,确保数据的完整
性。在 git 代码版本控制中要经常使用 git status 命令去查看状态。
思考题:
阅读维基百科和百度百科 的Git词条,总结分布式版本控制系统的核心机理。
GIT分布式版本控制系统,Git是一个免费的、分布式的版本控制工具,或是一个强调了速度快的源代
码管理工具。客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,
任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的
提取操作,实际上都是一次对代码仓库的完整备份这类系统指定和若干不同的远端代码仓库进行交互。在
同一个项目中分别和不同工作小组的人相互协作。根据需要设定不同的协作流程,比如层次模型式的工作
流,而这在以前的集中式系统中是无法实现的。