【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令

news2024/11/23 15:49:35

目录

一:概述

1.1. 何为版本控制

1.2. 为什么需要版本控制

1.3. 版本控制工具

1.4.  Git 简史

1.5. Git 工作机制

1.6. Git和代码托管中心

二:安装

2.1. Git安装

三:常用命令

3.1 设置用户签名

3.2  初始化本地库

3.3 查看本地库状态

3.4  添加暂存区

3.5 提交到本地库

3.6 查看历史版本

3.7 模拟版本迭代

3.8 版本穿梭


一:概述

        Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作 流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具

1.1. 何为版本控制

(1)版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

(2)版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换。

(3)例如:当我们修改毕业论文时,肯定不能直接在原来的版本上进行修改,我们不能保证会修改的越来越好,所以就需要对每次的每个修改版本进行备份,这就是版本控制!

1.2. 为什么需要版本控制

(1)目的是:从个人开发过渡到团队协作。

(2)例如:对于同一个项目,小红和小明都拉取到自己本机上修改;小红认为第一个版本应该加入222,变成第二个版本;小蓝认为第一个版本应该应该加入444,变成第三个版本;如果此时不使用版本控制工具,小蓝修改的版本就会覆盖原来小红修改的版本!所以就需要专门的版本控制工具去合并两个人的代码!

1.3. 版本控制工具

集中式版本控制工具

(1)CVS、SVN(Subversion)、VSS……

(2)集中化的版本控制系统诸如CVS、SVN 等,都有一个单一的集中管理的服务器,保存 所有文件的修订版本(修改好后就提交给中央服务器),而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或 者提交更新。多年以来,这已成为版本控制系统的标准做法。

(3)优点:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

(4)缺点:是中央服务器的单点故障,如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

分布式版本控制工具

(1)Git、Mercurial、Bazaar、Darcs……

(2)像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码 仓库(远程库)完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用 其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次 对整个文件仓库的完整备份。

(3)分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

①服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的);

②每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全);

1.4.  Git 简史

Git是Linus花了两周时间用C写了一个分布式版本控制系统,用来管理Linux系统的源码!

1.5. Git 工作机制

Git大概分为三个区:工作区、暂存区、本地库!

①工作区:是指代码存放的磁盘的目录的位置;

②暂存区:让git追踪到你有这么个代码文件,所以需要把工作区的代码添加到暂存区;

③本地库:把暂存区的代码提交到本地库,此时才会有对应的历史版本;

注:最后在从本地库推送到(push)远程仓库!

1.6. Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库!

➢ 局域网:GitLab(自己公司搭建的);

➢ 互联网:GitHub(外网)、Gitee 码云(国内网站);

二:安装

官网地址:https://git-scm.com/

2.1. Git安装

双击可执行文件,得到以下安装界面

选择 Git 安装位置,要求是非中文并且没有空格的目录(目录位置可自定义)

Git 选项配置,推荐默认设置

Git 安装目录名,不用修改

Git 的默认编辑器,建议使用默认的 Vim 编辑器

默认分支名设置,选择让 Git 决定,分支名默认为 master

修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git

选择后台客户端连接协议,选默认值 OpenSSL

配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换

选择 Git 终端类型,选择默认的 Git Bash 终端

选择 Git pull 合并的模式,选择默认

选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器

其他配置,选择默认设置,然后下一步。

实验室功能,技术还不成熟,有已知的 bug,不要勾选

 点击 Finsh 按钮,Git 安装成功!

 右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。

三:常用命令

3.1 设置用户签名

(1)基础语法

git config --global user.name 用户名 
git config --global user.email 邮箱 

(2)案例实操

(3)结果查看

怎么确定我们设置好了?使用cat命令进行查看

或者直接找到用户名下面的.gitconfig文件 

(4)说明

签名的作用是区分不同操作者身份;用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

3.2  初始化本地库

(1)基础语法

git init 

(2)案例实操

假设在D:\git-space目录下有一个git文件夹,在当前文件夹下点击右键选择Git Bash Here,此时就会跳转到当前目录下;执行git init命令,进行初始化,拿到权限才能进行管理!

(3)结果查看 

初始化后,会生成一个.git隐藏目录

也可以使用Linux命令进行查看,ll -a(-a表示显示所有的文件,包括隐藏的)

 

3.3 查看本地库状态

 (1)基本语法

git status

(2)案例实操

首次查看(工作区没有任何文件,生成三行日志目录)

新增文件(使用vim编辑器进行添加Hello.java)  

 再次查看(检测到未追踪的文件)

3.4  添加暂存区

 (1)基本语法

git add 文件名 

(2)案例实操

相当于从工作区添加到了暂存区

会出现一个警告,这个警告是告诉我们把windows的换行符CRLF自动转换成Linux的LF,不用管这个警告!

 查看状态(检测到暂存区有新文件)

此时要是不想让Hello.java保存历史版本,可以使用git rm --cached Hello.java进行删除!

注:此时只是删除暂存区里面的文件,在工作区上还是存在的!

3.5 提交到本地库

(1)基础语法

git commit -m "日志信息" 文件名 

(2)案例实操

将暂存区的文件提交到本地库

再次查看状态,日志信息又变了

 

3.6 查看历史版本

(1)基本语法

git reflog 查看版本信息 
git log 查看版本详细信息 

(2)案例实操

3.7 模拟版本迭代

修改文件Hello.java

再次查看状态 (检测到工作区有文件被修改)

将修改的文件再次添加暂存区,并查看状态

再次提交到本地库

明明只是修改了一行,为什么提示一行新增,一行删除?

注:在Git中是按照行来维护文件的,修改一行没有办法表达出来,只能把修改的那一行先删掉,然后把修改后的那一行新增进来!

3.8 版本穿梭

(1)基本语法

git reset --hard 版本号 

(2) 案例实操

再次查看历史版本信息,此时已经有两个版本

注:此时指向的是我们刚刚提交的第二个版本!

 此时查看文件的信息

切换到第一个版本

 查看版本信息,指针已经指向第一个版本了

 再次查看文件的信息

 

补充:也可以通过文件直接看

首先找到.git下面的HEAD文件,显示的内容如下:

ref: refs/heads/master // 指针指向了master,说明当前是在master分支上

在查看在master分支上的那个版本?在.git/refs/heads/master

708329dbaf888265cd62e21dd99dad5d3fd16b8c // 第一个版本号
// 指针指向了master分支,master分支又指向了第一个版本

总结:Git切换版本,底层其实是移动的head指针,head指针指向master分支,master分支又指向了版本号,通过调节指针的指向来切换不同的版本!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/404363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多节点部署一键启动脚本

1 背景 我们在实际项目开发的时候,往往一个大的项目需要很多人协同开发,大家都开发完成在一起联调的时候需要启动很多节点,如果每次都手动去启动所有节点效率非常低,所以我们可以写一个脚本一键启动所有进程,以下统称为节点。 根据节点依赖的环境,一键启动脚本分两种情…

电力电子中逐波限流控制以及dsp实现

逐波限流是指在电力系统运行中,对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制,每一波电流都可以独立地进行限制,从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…

1. ELK Stack 理论篇之什么是ELK Stack?

ELK Stack 理论篇之什么是ELK Stack?1.1 什么是 ELK Stack?1.2 ELK Stack的发展史1.2.1 Elasticsearch1.2.2 引入 Logstash 和 Kibana,产品更强大1.2.3 社区越来越壮大,用例越来越丰富1.2.4 然后我们向 ELK 中加入了 Beats1.2.5 那么&#x…

es6模块

目录 一、语法说明 二、示例代码 三、运行测试 一.语法说明 JavaScript 现在有两种模块。一种是 ES6 模块,简称 ESM;另一种是 CommonJS 模块,简称 CJS。CommonJS 模块是 Node.js 专用的,与 ES6 模块不兼容。语法上面&#xff0…

XE开发Linux应用(二)-Webservice

新建一个工程。选择如图。继续输入服务名然后就生成对应的单元。增加linux 平台。完善对应的单元代码{ Invokable implementation File for Txaliontest which implements Ixaliontest }unit xaliontestImpl;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns…

Hive常用内置函数、窗口函数及自定义函数

文章目录一、字符串函数二、数值函数三、日期函数四、其余常用函数五、窗口函数5.1、语法5.2、常用窗口函数六、自定义函数6.1、自定义UDF函数6.2、自定义UDTF函数6.3、将自定义函数导入hive中6.3.1、将项目打成jar包6.3.2、将jar包传入hive目录6.3.3、在hive中加载jar包6.3.4、…

C++回顾(二十五)—— map/multimap容器

25.1 map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。map的…

BN,LN,IN,GN的理解和用法

绿色区域表示将该区域作用域(四种方法都贯穿了w,h维度),即将该区域数值进行归一化,变为均值为0,标准差为1。BN的作用区域时N,W,H,表示一个batch数据的每一个通道均值为0,标准差为1;LN则是让每个数据的所有channel的均值…

新一代跨平台云备份工具Duplicacy

什么是 Duplicacy ? Duplicacy 是一款云备份软件,通过 Duplicacy 可以将视频,图片,文件,注册表等数据备份到云端。Duplicacy 通过客户端加密和最高级别的重复数据删除功能,将您的文件备份到许多云存储。 安…

SQL查漏补缺

有这么一道题,先看题目,表的内容如下 显示GDP比非洲任何国家都要高的国家名称(一些国家的GDP值可能为NULL)。 错误的查询: SELECT name FROM bbcWHERE gdp > ALL (SELECT gdp FROM bbc WHERE region Africa)正确的查询: SE…

C++ 11 pair

class pair 可将两个 value视为一个单元。C标准库内多处用到了这个 class 。尤其是容器 map、multimap、unordered_map和 unordered_multimap就是使用 pair 来管理其以 key/value pair形式存在的元素。任何函数如果需要返回两个 value,也需要用到 pair,例…

Windows使用Stable Diffusion时遇到的各种问题和知识点整理(更新中...)

Stable Diffusion安装完成后,在使用过程中会出现卡死、文件不存在等问题,在本文中将把遇到的问题陆续记录下来,有兴趣的朋友可以参考。 如果要了解如何安装sd,则参考本文《Windows安装Stable Diffusion WebUI及问题解决记录》。如…

九龙证券|盘前直接腰斩,银行巨头紧急“拔网线”!美股银行股又崩了?

见证历史了,又有一家银行巨子倒下? 美股银行股团体暴降 上一交易日暴降超60%的硅谷银行持续面对腥风血雨。盘前,硅谷银行跌幅超50%,随后,公司宣布盘前暂停交易,等待刊发消息。 而最新消息显现&#xff0c…

Spring Cloud Gateway 超时、CORS配置 | Spring Cloud 17

一、Http超时配置 Spring Cloud Gateway 可以为所有路由配置 Http 超时(响应和连接),并为每个特定路由覆盖设置。 1.1 全局超时 配置全局 http 超时: connect-timeout必须以毫秒为单位指定。response-timeout必须指定为 java.…

[qiankun+nuxt]子应用请求本地文件报错404

前言 目前公司的前端架构是qiankunnuxt做的微前端项目 问题说明 在子应用中,前端需要模拟一些数据,方便后期演示调整而不需要重新打包 所以将一些数据存储到了本地的json文件中,但是获取时报了404的错误,找不到该文件。 页面报错…

Springboot是什么

目录 为什么会要用springboot 1、之前 2、现在 springboot优点 springboot四大核心 自动装配介绍 1、自动装配作用是什么 2、自动装配原理 springboot starter是什么 1、starter作用 2、比如:我们想搭建java web框架 3、starter原理 SpringBootApplica…

ROS小车研究笔记3/11/2023:多点导航及其源码实现

多点导航操作 打开导航launch文件 roslaunch turn_on_wheeltec_robot navigation.launch rviz 在rviz里,选择publish point在地图上点击标记目标点。在标记多个目标点后小车会按标记顺序依次在各个目标点中往返 多点导航对于话题MarkerArray。需要在rviz中使marke…

网页基本标签、图像标签、链接标签、块内元素和块元素、列表标签、表格标签

一、网页基本标签 标题标签 段落标签 未写段落标签前,文本没有按照想要的格式排列显示 写段落标签后: 每句都是一段,所以句与句距离比较宽 换行标签 同一段,只是把文字换行,所以比较紧凑 水平线标签 字体样式标签 …

【深度学习】神经网络和深度学习--卷积和池化的作用

深度学习通常指训练大型深度的神经网络的过程。 与传统的神经网络模型相比,深度学习模型在结构上与之非常相似;不同的是,深度学习模型的“深度”更大,“深度”的体现就是神经网络层数多,神经网络每一层的结点数多。 本…

# 关于Docker容器中时间时区问题的测试

关于Docker容器中时间时区问题的测试 文章目录关于Docker容器中时间时区问题的测试1 基础知识1.1 /etc/localtime1.2 /etc/timezone2 我在gitlab中遇到的问题与解决方法3 ubuntu官方镜像时区相关问题的测试3.0 官方原版测试3.1 不设置任何参数测试3.2 只设置TZ"Asia/Shang…