【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令
目录
一:概述
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分支又指向了版本号,通过调节指针的指向来切换不同的版本!
相关文章:

【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令
目录 一:概述 1.1. 何为版本控制 1.2. 为什么需要版本控制 1.3. 版本控制工具 1.4. Git 简史 1.5. Git 工作机制 1.6. Git和代码托管中心 二:安装 2.1. Git安装 三:常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库…...

【人脸识别】ssd + opencv Eigenfaces 和 LBPH算法进行人脸监测和识别
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言ssd opencv Eigenfaces 和 LBPH算法进行人脸监测和识别1. ssd 目标监测2.opencv的三种人脸识别方法2.1 Eigenfaces2.2 LBPH前言 ssd opencv Eigenfaces 和 LB…...

PMP项目管理项目成本管理
目录1 项目成本管理概述2 规划成本管理3 估算成本4 制定预算5 控制成本1 项目成本管理概述 项目成本管理包括为使项目在批准的预算内完成而对成本进行规划、估算、预测、融资、筹资、管理和控制的各个过程,从而确保项目在批准的预算内完工。核心概念 项目成本管理旨…...

Vue3视频播放器组件Vue3-video-play入门教程
Vue3-video-play适用于 Vue3 的 hls.js 播放器组件 | 并且支持MP4/WebM/Ogg格式。 1、支持快捷键操作 2、支持倍速播放设置 3、支持镜像画面设置 4、支持关灯模式设置 5、支持画中画模式播放 6、支持全屏/网页全屏播放 7、支持从固定时间开始播放 8、支持移动端,移动…...
操作系统经典问题——消费者生产者问题
今日在学习操作系统的过程中遇到了这个问题,实在是很苦恼一时间对于这种问题以及老师上课根据这个问题衍生的问题实在是一头雾水。在网络上寻找了一些大佬的讲解之后算是暂时有了点茅塞顿开的感觉。 首先第一点什么是生产者——消费者问题: 系统中有一…...

网络安全工程师在面试安全岗位时,哪些内容是加分项?
金三银四已经来了,很多小伙伴都在困惑,面试网络安全工程师的时候,有哪些技能是加分项呢?接下来,我简单说说! 去年我在微博上贴了一些在面试安全工作时会加分的内容,如下: 1. wooyu…...
前端整理 —— vue
1. vue的生命周期 经典爱问,感觉内容挺多的 介绍一下有哪几个 vue2中的生命周期有11个,分别为beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeDestroy&…...

HTML快速入门
目录HTML概念HTML基本格式基本语法常用标签1.文件标签:构成html最基本的标签2.文本标签:和文本有关的标签3.列表标签4.图片标签5.超链接标签6.表格标签7.表单标签HTML概念 HTML是最基础的网页开发语言,Hyper Text Markup Language࿰…...

哈希冲突
为什么会有哈希冲突?哈希表通过哈希函数来计算存放数据,在curd数据时不用多次比较,时间复杂度O(1)。但是凡事都有利弊,不同关键字通过相同哈希函数可能计算出来相同的存放地址,这种现象被称为哈…...

git添加子模块(submodule)
git添加子模块(submodule) 背景 有时候自己的项目需要用到别人的开源代码,例如 freertos 和 tinyusb 这个时候有两种选择 将开源的代码下载下来放到自己的 git 中管理 缺点:如果远端仓库更新,自己仓库的代码不会更新 将开源代码通过子模块…...

C++ 11 pair
class pair 可将两个 value视为一个单元。C标准库内多处用到了这个 class 。尤其是容器 map、multimap、unordered_map和 unordered_multimap就是使用 pair 来管理其以 key/value pair形式存在的元素。任何函数如果需要返回两个 value,也需要用到 pair,例…...
反向传播与随机梯度下降
反向传播实际上就是在算各个阶段梯度,每层的传入实际是之前各层根据链式法则梯度相乘的结果。反向传播最初传入的Δout是1,Δ通常表示很少量的意思,Δout1的时候这样在反向传播的时候算出来的dw和dx刚好就是当前梯度。深度神经网络中每层都会…...
一个conda引起的CPU异常
03/11/2023 登陆访问用户CPU异常 错误描述 早上向往常一样打开机器,突然感觉CPU有点"乱飙",因为是个人机器,没有别人使用,所以感觉有点问题。 排错流程 首先查看各个进程的资源占用情况 top # 按住P,以CPU的…...

java Date 和 Calendar类 万字详解(通俗易懂)
Date类介绍及使用关于SimpleDateFormat类Calendar类介绍及使用LocalDateTime类介绍及使用关于DateTimeFormatter类一、前言本节内容是我们《API-常用类》专题的第五小节了。本节内容主要讲Date 类 和 Calendar 类,内容包括但不限于Date类简介,Date类使用…...

扩展欧几里得算法及其应用
前言 由于数论的板子真的很抽象,也很难背,所以特此记录扩展欧几里得算法的板子和它的用途 本篇文章只涉及应用,不涉及证明,如需理解证明还请各位移步其他优秀的讲解! 扩展欧几里得算法 先粘一下板子的代码 typedef lo…...
JAVA练习75-全排列
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 提示:这里可以添加本文要记录的大概内容: 3月11日练习内容 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目-…...

Linux下Docker安装mysql-超详细步骤
安装Docker Engine官方参考文档:https://docs.docker.com/engine/install/centos/若之前有安装docker,需要先卸载之前的dockersudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \d…...

弹性存储-对象存储OSS部分
对象存储介绍 对象存储(object storage service,简称oss),具备与平台无关的rest api接口,可提供99.9999999999%(12个9)的数据持久性和99.995%的数据可用性。 OSS优势 功能介绍 存储空间bucke…...
强推!30个遥感数据下载网站整理分享
1、中国遥感数据共享网(http://rs.ceode.ac.cn/)国内存档周期最长的数据网站,对Landsat数据免费共享,也可订购国外商业卫星数据。注册账号,通过审核就可直接下载。2、中国资源卫星应用中心(https://data.cr…...

进程系统调用
进程系统调用 文章目录进程系统调用fork()进程创建:fock()fork函数fork用法僵尸进程孤儿进程vfork函数vfork与fork区别exec函数族exec函数族-何时使用?exec函数族语法exec函数族使用区别exit和_exit_exit和exit的区别wait和waitpidfork() 进程创建&…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...