实验1 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.1 安装GIT
根据自己电脑实际情况安装GIT。
1.2 初次配置GIT
设置GIT用户名,邮箱,并确保 Git 输出内容带有颜色标记,对比显示原始状态。
1.3 从头创建仓库
1.3.1创建项目目录
创建一个目录,叫做 se2020-git-course,在该目录中,创建另一个目录,叫做 new-git-project,使用 cd 命令移到 new-git-project 目录下。
可在终端上运行以下命令:- mkdir -p se2020-git-course/new-git-project && cd $_
1.3.2 初始化并查看状态
在终端输入git init,运行。
输出:"Initialized empty Git repository in",后面提示符中出现了matser。状态为No commits yet"(尚未有任何提交)
说明:运行 git init 命令会初始化 Git 跟踪所有内容会用到的所有必要文件和目录。所有这些文件都存储在叫做 .git的目录下。这个 .git 目录是一个库!Git 会将所有 commit 记录在这里,并跟踪所有内容!
1.3.3 克隆现有仓库
在 Git 上进行克隆的方法是调用我们将在终端上运行的命令 git clone,然后传入要克隆的 Git 仓库的路径(通常是 URL)。输入命令 git clone,然后输入你要克隆的 Git 仓库的路径。实验使用以下 URL :https://github.com/udacity/course-git-blog-project 。
完整命令是:git clone https://github.com/udacity/course-git-blog-project
错误界面:
原因:
首先是出现该问题可能是上传大小限制,执行如下命令:
git config http.postBuffer 524288000
此时再次clone依然可能报错,这时可以尝试git config http.sslVerify "false"
但是这时显示fatal: not in a git directory
使用如下命令
git config --global http.sslVerify "false"
然后再输入git clone https://github.com/udacity/course-git-blog-project
1.3.4 判断状态
在终端输入git status ,查看结果。
输出:
(1)On branch master – Git 位于 master 分支上。
(2)nothing to commit, working directory clean – 表示没有任何待定的更改。
可以将这一输出结果看作“休息状态(resting state)”。因为没有新的文件、没有对文件作出更改、暂存区没有任何需要 commit 的内容……没有更改或操作。
1.4.1 查看目录状态
使用命令行转到项目的目录下,输入 git status 。
输出:"nothing to commit, working directory clean",意味着我们可以继续并检出该项目了!
1.4.2 查看更改
(1)git log -- online,结果简单节省空间。
输出:每行显示一个 commit
显示 commit 的 SHA 的前 7 个字符
显示 commit 的消息。
(2)git log --stat
输出:显示被修改的文件
显示添加/删除的行数
显示一个摘要,其中包含修改/删除的总文件数和总行数
(3) git log -p
此命令会向默认输出中添加以下信息:
显示被修改的文件
显示添加/删除的行所在的位置
显示做出的实际更改
(4)git log -w
1.5 git add&git commit&git diff指令
1.5.1 添加新文件
在new-git-project里 创建 index.html 文件,添加代码;建立 js 和css 文件夹,并在文件下分别建立 app.js 和 app.css 文件,文件内容可为空。
(1)运行git add index.html命令,使用 git add 将 index.html 添加到暂存区:
输出:显示 index.html 现在位于"Changes to be committed"(暂存)分类下。
(2)暂存其他文件
运行git add css/app.css js/app.js指令:
(3)进行第一次提交
输入“git commit”,进入编译器进行修改:
输出:完成第一次提交。
1.5.2 git commit
(1)现在提交第二个 commit!将以下内容添加到 index.html 中的 body 标记中:
Expedition
输出:"Changes not staged for commit"部分,其中包含修改后的"index.html"文件。
(2)使用 git add 命令将文件移到暂存区,并使用 git status 验证文件是否位于暂存区。
提交第二个 commit 吧!
1.5.3 git diff
git diff 命令用来查看已经执行但是尚未 commit 的更改:
输出:已经修改的文件
添加/删除的行所在的位置
执行的实际更改
1.5.4 .gitignore
(1)在项目所在目录添加了一个 Word 文档等文件,但是不希望将该文件添加到仓库中。git 会看到这个新文件,所以在你运行 git status 时,它将显示在文件列表中。
(2)将某个文件保留在项目的目录结构中,但是确保它不会意外地提交到项目中,可以使用名称特殊的文件 .gitignore(将此文件添加到 new-git-project项目根目录。
输出:存在错误,依旧可以看见project.docx.git 知道查看名称为 .gitignore 的文件的内容。应该忽略了该文件,并且没有在 git status 的输出结果中显示该文件。
1.6 标签与分支
1.6.1 git tag
(1)创建标签
进入news-git-project,输入git tag 命令,使用 git tag 命令与仓库的标签进行交互,上述命令将打开代码编辑器,并等待你为标签输入信息。我们输入"Ready for content"作为tag。
(2)验证标签
保存并退出编辑器后,命令行上什么也不会显示。那么如何知道已经向项目中添加了标签呢?只需输入 git tag,命令行会显示仓库中的所有标签。
(3)使用git log,查找标签所在位置。
输出: tag: v1.0
说明:标签与 commit 相绑定。因此,该标签与 commit 的 SHA 位于同一行
(4)删除标签
可以通过输入 -d 选项 加上标签名称来删除 git 标签:
$ git tag -d v1.0
(图不小心删了)
1.6.2 git branch
(1)创建分支
创建分支,只需git branch并提供要创建的分支对应的名称。创建一个"sidebar"的分支,运行以下命令:git branch sidebar。
由于目前提示符显示的是当前分支master。要使用该sidebar分支,你需要切换到该分支。需要切换到其他分支,运行git checkout sidebar.
输出:提示符现在会显示"sidebar"
从工作目录中删除 git 跟踪的所有文件和目录
转到仓库,并提取分支指向的 commit 所对应的所有文件和目录
因此此命令将删除 master 分支中的 commit 引用的所有文件。它会将这些文件替换为 sidebar 分支中的 commit 引用的文件。
(2)活跃分支
提示符将显示活跃分支。但这是我们对提示符进行的特殊自定义,如果你使用的是不同的计算机,判断活跃分支的最快速方式是查看git branch 命令的输出结果。活跃分支名称旁边会显示一个星号。
(3)删除分支
如果你想删除分支,运行git branch -d siderbar 。
输出:删除分支sidebar.
(4)合并分支
现在活跃分支为master,运行git merge sidebar命令。
输出:Already up to date,当前分支master和 sidebar分支代码不同步。
主分支是:master,其他分支是sidebar。
解决方法:
git reset --hard sidebar;
git push --force origin master
发生合并时,git 将:查看将合并的分支
查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit
将单个分支上更改的代码行合并到一起
提交一个 commit 来记录合并操作
合并冲突
现在已经创建好分支,我们只需切换到heading-sidebar分支再次更新标题。确保更改在 master 分支上做出更改的同一行。
输出:已经在 master 分支上做出了更改标题的 commit,在 heading-sidebarr分支上做出了同样更改标题的 commit,已经位于 master 分支上。
1.8 撤销合并
(1)更改最后一个commit
运行git commit --amend命令,查找更改最近的 commit。代码编辑器将打开,并显示原始 commit 消息,纠正拼错的单词,然后保存文件并关闭编辑器,以便采用新的 commit 消息。
(2)还原 commit
git 还原 具体的 commit 时,git 会执行和 commit 中的更改完全相反的更改。创建了一个包含一些更改的 commit,使用 git revert 命令还原它。
最近的 commit 的 SHA 是 dcab582,要还原该 commit: 需要运行 git revert dcab582(随即弹出代码编辑器,以便编辑/确认提供的 commit 消息)
输出:将撤消目标 commit 所做出的更改
创建一个新的 commit 来记录这一更改
(3)重置
使用git reset --mixed HEAD^命令用来重置(清除)commit,取消暂存已被 commit 的更改.
输出:将 HEAD 和当前分支指针移到目标 commit
清除 commit
将 commit 的更改移到暂存区
取消暂存 commit 的更改
实验总结与体会:
(1)由于第一次做GIT实验,很多git指令都不熟悉,经常打错指令。在运行git实验各指令时,应该经常使用git status,查看仓库状态。
(2)在 Git 上进行克隆时,调用运行的命令 git clone,然后传入要克隆的 Git 仓库的路径,但失败了。问题可能是上传大小限制,执行如下命令:
git config http.postBuffer 524288000
此时再次clone依然可能报错,再尝试git config http.sslVerify "false"
但是这时显示fatal: not in a git directory
于是使用命令:git config --global http.sslVerify "false"
然后再输入git clone https://github.com/udacity/course-git-blog-project 。
(3)合并分支时出现:Already up to date,当前分支 master 和sidebar分支代码不同步。
①当前分支或者主分支代码不是最新的,有未更新(未提交的代码),把分支代码提交最新再进行合并
②假设当前分支是:sidebar,主分支是:master
解决方法:git checkout master;
git reset --hard sidebar;
git push --force origin master
思考题:
阅读维基百科和百度百科 的Git词条,总结分布式分布式版本控制系统的核心机理.
首先,Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。系统保存的的不是文件变化的差量,而是文件的快照,即把文件的整体复制下来保存,而不关心具体的变化内容。其次,Git实际上是通过维持复杂的文件树来实现版本控制的。Git保存文件的完整内容,不保存差量变化。SHA-1 校验和是文件的指针,Git依靠它来区分文件。
Git 是用于 Linux内核开发的版本控制工具,采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快, 它的合并跟踪能力强。Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。作为开源自由原教旨主义项目,Git 没有对版本库的浏览和修改做任何的权限限制,我们可以通过git增加内容,提交内容,管理分支。
实验1 GIT代码版本管理的更多相关文章
- 实验一 GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...
- 实验一 GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ini ...
- 软件工程实验一 Git代码版本管理
实验一 GIT 代码版本管理 一.实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)熟练掌握git的基本指令和分支管理指令: 二.实验内容: 1)安装git: 2)初始配置git ,gi ...
- 实验一Git代码版本管理
GIT代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git ...
- 软工 实验一 Git代码版本管理
实验目的: 1)了解分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git init git status指令 3 ...
- 实验一 git代码版本管理
实验目的 1. 了解分布式系统版本管理的核心机理. 2. 熟练掌握 git 的基本指令和分支管理指令. 实验内容 1. 安装 git.2. 初始化配置 git,git init ,git status ...
- 实验一  GIT 代码版本管理
实验一 GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...
- iOS - Git 代码版本管理
1.Git Git 是用 C 语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容. ...
- GIT代码版本管理
一.实验目的 1.了解分布式版本控制系统的核心机理: 2.熟练掌握git的基本指令和分支管理指令: 二.实验内容 1.安装git: 2.初始配置git,git init git status指令: 3 ...
随机推荐
- python之路之面向对象
一.编程 1.面向对象编程和函数式编程 a.面向对象编程之self(重点) b.面向对象的封装 c.继承 (1)继承的优先级 d.重载 e.多态 2.查看socketserver源码执行过程
- jvm(4):类文件结构
typora-root-url: ./ 类文件结构 魔数Magic Number 每个Class文件的头4个字节是魔数.值为0xCAFEBABE 唯一作用:确定这个文件是一个能被虚拟机接受的Class ...
- 第七章 类(class)7.1 笔记
最好不要把对象的定义和类的定义放在一起,这么做无异于把两种不同实体的定义混在了一条语句里,一会定义类,一会又定义变量,显然这是一种不被建议的行为. 类的定义最后要加上分号(:) 成员函数的声明必须放在 ...
- 2.17NOIP模拟赛(by hzwer) T3 小奇回地球
[题目背景] 开学了,小奇在回地球的路上,遇到了一个棘手的问题. [问题描述] 简单来说,它要从标号为 1 的星球到标号为 n 的星球,某一些星球之间有航线. 由于超时空隧道的存在,从一个星球到另一个 ...
- LED Decorative Light Supplier Introduction - LED Track Light Products
LED Decorative Light Supplier introduction: LED track light is a track light with LED as the ligh ...
- 2019 ICPC徐州网络赛 E. XKC's basketball team(二分)
计蒜客题目链接:https://nanti.jisuanke.com/t/41387 题目大意:给定一组无序序列,从第一个数开始,求最远比这个数大m的数,与这个数之间相隔多少数字?如果没有输出-1,否 ...
- leetcode78.子集➕90.子集2
78子集 dfs dfs1: 和全排列的区别就是对于当前考察的索引i,全排列如果不取i,之后还要取i,所以需要一个visited数组用来记录.对于子集问题如果不取i,之后也不必再取i. 单纯递归回溯 ...
- [python]Python 字典(Dictionary) update()方法
update() 函数把字典dict2的键/值对更新到dict里.如果后面的键有重复的会覆盖前面的语法dict.update(dict2) dict = {'Name': 'Zara', 'Age': ...
- SCROLLINFO结构详解
在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二. 在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrol ...
- bugku flag在index里
原题内容: http://120.24.86.145:8005/post/ Mark一下这道题,前前后后弄了两个多小时,翻了一下别的博主的wp感觉还是讲的太粗了,这里总结下自己的理解: 首先打开这道题 ...