【书籍篇】Git 学习指南(一)基础概念及入门
Git 学习指南(一)基础概念及入门
- 一. 基本概念
- 1.1 分布式版本控制
- 1.1.1 集中式版本控制系统
- 1.1.2 分布式版本控制系统
- 1.1.3 特型版本库
- 1.2 版本库,分布式工作的基础所在
- 1.2.1 散列值
- 1.3 分支的创建与合并
- 1.3.1 分支的其他操作
- 二. 入门
- 2.1 准备Git环境
- 2.2 创建版本库
- 2.2.1 初始化版本库
- 2.2.2 提交文件
- 2.2.3 检查状态
- 2.2.4 提交修改
- 2.2.5 显示历史
- 2.3 Git的协作功能
- 2.3.1 克隆版本库
- 2.3.2 从另一版本库中获取修改
- 2.3.3 从任意版本库中取回修改
- 2.3.4 创建共享版本库并应用
读前须知: 本篇章内容取自《Git 学习指南》 P1~P17,如需更多详细内容请购买正版书籍
下一章节: 【书籍篇】Git 学习指南(二)提交与多次提交
一. 基本概念
1.1 分布式版本控制
1.1.1 集中式版本控制系统
略。。。详细内容《Git 学习指南》 P1
1.1.2 分布式版本控制系统
| 优点 | 描述 |
|---|---|
| 高性能 | 几乎所有的操作都无需进行网络访问,均可直接在本地执行 |
| 高效的工作方式 | 开发者可通过多个本地分支在不同任务之间进行快速切换 |
| 离线功能 | 开发者可以在没有服务器连接的情况下执行提交、创建分支、版本标签等操作,之后再将其上传服务器 |
| 灵活的开发进程 | 我们可以在团队和公司中为其他部门建立专用的版本库 |
| 备份作用 | 每个开发者都持有一份拥有完整历史版本的版本库副本 |
| 可维护性 | 对于那些难以对付的重构工作,可以将其成功传送给其原始版本之前,先在该版本库的副本上尝试一下 |
1.1.3 特型版本库
| 特型版本库 | 描述 |
|---|---|
| 项目版本库 | 主要用于存储由“官方”创建并发行的版本 |
| 共享版本库 | 主要用于开发团队内人员之间的文件交换 |
| 工作流版本库 | 通常只用于填充那些代表工作流中某种特定进展状态的修改 |
| 派生版本库 | 主要用于从开发主线分离出某部分内容 |
1.2 版本库,分布式工作的基础所在
| 版本库组件 | 版本库本质上就是一个高效的数据存储结构 |
|---|---|
| 文件(blob) | 既包含了文本也包含了二进制数据,这些数据将不以文件名的形式被保留 |
| 目录(Tree) | 目录中保存的是与文件名相关联的内容,其中也会包含其他目录 |
| 版本(commit) | 每一个版本所定义的都是相应目录的某个可恢复的状态 |
1.2.1 散列值
对于所有的数据,他们都会被计算成一个十六进制散列值,这个散列值将会被用作相关对象的引用,以及日后恢复数据时所需的键值
| 优势 | 描述 |
|---|---|
| 高性能 | 通过散列值来访问数据非常快 |
| 冗余度–释放存储空间 | 相同的文件内容只需要存储一次即可 |
| 分布式版本号 | 由于相关散列值是根据文件,作者和日期来计算的,所以版本也可以“离线”产生,不用担心将来因此而发生版本冲突 |
| 版本间的高效同步 | 当我们将某一提交从一个版本库传递给另一个版本库时,只需要传送那些目标版本库中不存在的对象即可。而正是通过散列值的帮助,才能更快地判断相关对象是否已经存在 |
| 数据完整性 | 由于散列值是根据数据的内容来计算的,所以我们可以随时通过Git来查看某一散列值是否与相关数据匹配,以检测该数据上可能的意外变化或恶意操作 |
| 自动重命名 | 被重命名的文件可以被自动检测到,因为根据该文件内容计算出的散列值并没有发生变。也正因为如此,Git中并没有专用的重命名命令,只需要移动命令即可 |
1.3 分支的创建与合并
1.3.1 分支的其他操作
| 其他操作 | 描述 |
|---|---|
| 移植分支 | 我们可以直接将某一分支中的提交转移到另一个版本库中 |
| 只传送特定修改 | 我们可以将某一分支中的某一次或某几次提交直接复制到另一个分支中(捡取处理) |
| 清理历史 | 我们可以对分支历史进行改造,排序和删除。有利于为该项目建立更好的历史文档(交互式重订) |
二. 入门
2.1 准备Git环境
git config --global user.email "jieKaMi@gmail.com"
2.2 创建版本库
2.2.1 初始化版本库
在F盘创建一个git文件夹,创建dev.txt和test.txt作为测试
$ cd /f/git-dev
$ git init
Initialized empty Git repository in F:/git-dev/.git/
2.2.2 提交文件
b563b27: 散列值(该值取决于文件内容)
$ git add src.txt test.txt
$ git commit --message "first commit"
[master (root-commit) b563b27] first commit2 files changed, 2 insertions(+)create mode 100644 dev.txtcreate mode 100644 test.txt
2.2.3 检查状态
操作:
(1)修改dev.txt
(2)删除test.txt
(3)新增prod.txt
更多细节: git diff src.txt
$ git status
On branch master
Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: dev.txtdeleted: test.txtUntracked files:(use "git add <file>..." to include in what will be committed)prod.txtno changes added to commit (use "git add" and/or "git commit -a")
2.2.4 提交修改
操作:
(1)添加dev.txt和prod.txt到git上 ,移除git上的test.txt
(2)再次调用status
(3)使用commit提交
$ git add dev.txt prod.txt
$ git rm test.txt
rm 'test.txt'$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: dev.txtnew file: prod.txtdeleted: test.txt$ git commit --message "second commit"
[master 8a08078] second commit3 files changed, 2 insertions(+), 2 deletions(-)create mode 100644 prod.txtdelete mode 100644 test.txt
2.2.5 显示历史
log命令: 可用来显示项目的历史,所有提交都会按时间顺序被降序排列起来
$ git log
commit 8a08078e36778ae9506bf625054fb088ce708f59 (HEAD -> master)
Author: jieKaMi <l>
Date: Mon Nov 20 23:33:03 2023 +0800second commitcommit b563b27503fb3ac34624418666656ed5db7a855f
Author: jieKaMi <l>
Date: Mon Nov 20 23:29:22 2023 +0800first commit
2.3 Git的协作功能
2.3.1 克隆版本库
$ git clone /f/git-dev /f/git-clone
Cloning into 'F:/git-clone'...
done.
2.3.2 从另一版本库中获取修改
操作:
(1)修改dev.txt并在原版本库中提交
(2)修改prod.txt并在克隆版本库中提交
(3)在克隆库中pull一下
(4)可以在克隆库git log --graph查看记录
$ cd /f/git-dev/
$ git add dev.txt
$ git commit --message "three commit"
[master 2febc9b] three commit1 file changed, 1 insertion(+), 1 deletion(-)$ cd /f/git-clone/
$ git add prod.txt
$ git commit --message "four commit"
[master bf4f4fd] four commit1 file changed, 1 insertion(+), 1 deletion(-)$ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From F:/git-dev8a08078..2febc9b master -> origin/master
Merge made by the 'recursive' strategy.dev.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)$ git log --graph
2.3.3 从任意版本库中取回修改
操作:(1)回到原版本库 (2)从克隆库中pull修改操作
$ cd /f/git-dev
$ git pull /f/git-clone master
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
From F:/git-clone* branch master -> FETCH_HEAD
Updating 2febc9b..90d84a1
Fast-forwardprod.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
2.3.4 创建共享版本库并应用
操作:(1)创建一个裸版本库 (2)修改原版本库dev.txt并提交 (3)向共享版本库使用push命令 (4)从共享库中同步到克隆库
裸版本库: 通常可被用来充当开发者们传递提交命令的汇聚点,以便其他人可从中拉回他们所做的修改
$ git clone --bare /f/git-dev /f/git-bare
Cloning into bare repository 'F:/git-bare'...
done.$ cd /f/git-dev/
$ git add dev.txt
$ git commit --message "five commit"$ git push /f/git-bare master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 255 bytes | 255.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To F:/git-bare90d84a1..600c3c3 master -> master$ cd /f/git-clone
$ git pull /f/git-bare master
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From F:/git-bare* branch master -> FETCH_HEAD
Updating 90d84a1..3d681ec
Fast-forwarddev.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
相关文章:
【书籍篇】Git 学习指南(一)基础概念及入门
Git 学习指南(一)基础概念及入门 一. 基本概念1.1 分布式版本控制1.1.1 集中式版本控制系统1.1.2 分布式版本控制系统1.1.3 特型版本库 1.2 版本库,分布式工作的基础所在1.2.1 散列值 1.3 分支的创建与合并1.3.1 分支的其他操作 二. 入门2.1 …...
JWT知识点
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提…...
UDP接收报文函数recvfrom和UDP发送报文函数sendto
#include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); sockfd、buff 和 nbytes 是前三个参数。sockfd 是本地创建的套接字描述符,buff 指向本地的缓存,nbyt…...
Redisson 分布式锁实战应用解析
文章目录 前言一、Redisson介绍二、Redisson的使用1.1 引入依赖1.2 编写配置1.3 示例测试_011.4 示例测试_02 三、Redisson源码分析2.1 加锁源码2.2 看门狗机制 前言 分布式锁主要是解决分布式系统下数据一致性的问题。在单机的环境下,应用是在同一进程下的&#x…...
【机器学习】对比学习(contrastive learning)
对比学习是一种机器学习技术,算法学习区分相似和不相似的数据点。对比学习的目标是学习数据的表示,以捕捉不同数据点之间的基本结构和关系。 在对比学习中,算法被训练最大化相似数据点之间的相似度,并最小化不相似数据点之间的相似…...
开源和闭源的优劣势比较
开源与闭源软件之争一直是技术领域一个备受关注的话题,而在近期特斯拉CEO马斯克的表态中,关于开源的讨论更是引发了广泛的关注。以下是一些关于开源和闭源的优劣势以及对未来大模型发展的一些见解: 开源软件的优势: 创新与合作&a…...
html手势密码解锁插件(附源码)
文章目录 1.设计来源1.1 界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134534785 html手势密码解锁插件(附源码),仿手机手势密码,拖动九…...
Jetson JetPack-5.1.2-L4T-R35.4.1 修复deskew algorithm的问题
1. 前言 官方Orin Nano开发套件 版本: JetPack 5.1.2 2. 问题描述 使用的是带有Orin Nano EVK的GMSL相机,但我无法看到MIPI帧。 这里是媒体设备信息: Media controller API version 5.10.120Media device information ------------------------ driver tegra-…...
Doris的分区表和分桶表
1 列定义 以AGGREGATE KEY数据模型为例进行说明。更多数据模型参阅Doris数据模型。 列的基本类型,可以通过在mysql-client中执行HELP CREATE TABLE; 查看。 AGGREGATE KEY数据模型中,所有没有指定聚合方式(SUM、REPLACE、MAX、MIN)的列视为Key列。而其余则为Value列。 定义…...
华为HCIE技术(HCIP、HCIE)汇总
我所在的岗位是网络运维,路由与交换用的比较多,外网技术比较少。所以把经常用的写的比较详细。大家多多包涵。 理论部分 网络基础:ISO网络七层模型 交换机部分 首次Console口登陆配置Telnet访问 VLAN VLAN的介绍、单交换机vlan划分实验…...
React结合antd5实现整个表格编辑
通过react hooks 结合antd的table实现整个表格新增编辑。 引入组件依赖 import React, { useState } from react; import { Table, InputNumber, Button, Space, Input } from antd;定义数据 const originData [{ key: 1, name: 白银会员, value: 0, equity: 0, reward: 0…...
【C++进阶之路】第八篇:智能指针
文章目录 一、为什么需要智能指针?二、内存泄漏1.什么是内存泄漏,内存泄漏的危害2.内存泄漏分类(了解)3.如何检测内存泄漏(了解)4.如何避免内存泄漏 三、智能指针的使用及原理1.RAII2.智能指针的原理3.std:…...
保护服务器免受攻击:解析攻击情境与解决之道
在数字化时代,服务器安全问题日益突出,因为它们是企业和个人网络活动的核心。服务器被攻击可能引发一系列问题,理解攻击的不同情境以及采取相应的解决方法变得至关重要。 DDoS 攻击(分布式拒绝服务攻击) 情境ÿ…...
Python 获取两个数组中各个坐标点对之间最短的欧氏距离
Python 获取两个数组中各个坐标点对之间最短的欧氏距离 代码如下: import numpy as np from scipy import spatialxy1 = np.array([[243, 3173],[525, 2997]]...
假ArrayList导致的线上事故......
假ArrayList导致的线上事故… 线上事故回顾 晚饭时,当我正沉迷于排骨煲肉质鲜嫩,汤汁浓郁时,产研沟通群内发出一条消息,显示用户存在可用劵,但进去劵列表却什么也没有,并附含了一个视频。于是我一边吃了排…...
K8S精进之路-控制器Deployment-(1)
在K8S中,最小运行单位为POD,它是一个逻辑概念,其实是一组共享了某些资源的容器组。POD是能运行多个容器的,Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。在POD中能够hold住网络…...
flutter iOS 视频mov格式转MP4格式
flutter iOS 视频mov格式转MP4格式 前言一、使用video_compress压缩视频总结 前言 今天在写项目的时候,突然发现iOS 里面的有些视频格式是mov的格式,这就导致在视频播放组件无法播放的问题,期间试过替换视频格式,但是又不想存储文…...
datafilecopy header validation failure for file +DATA/orcl/datafile/file1.ora
环境 linux 6.8 oracle 11.2.0.4 rac 未打补丁 现象: 数据库日志中显示 datafilecopy header validation failure for file DATA/orcl/datafile/file1.ora原因 用rman的backup as copy 对数据文件进行了copy或者叫位置更改时候,在sqlplus中对文件名进行…...
[机缘参悟-119] :一个IT人的反思:反者道之动;弱者,道之用 VS 恒者恒强,弱者恒弱的马太效应
目录 前言: 一、道家的核心思想 二、恒者恒强,弱者恒弱的马太效应 三、马太效应与道家思想的统一 3.1 大多数的理解 3.2 个人的理解 四、矛盾的对立统一 前言: 马太效应和强弱互转的道家思想,都反应了自然规律和社会规律&…...
CentOS用nginx搭建文件下载服务器
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动。在工作中,我们经常会用到需要搭建文件服务器的情况,这里就以在linux下搭…...
Ambar 多语言支持:如何配置中文、英文等8种语言分析器
Ambar 多语言支持:如何配置中文、英文等8种语言分析器 【免费下载链接】ambar :mag: Ambar: Document Search Engine 项目地址: https://gitcode.com/gh_mirrors/am/ambar Ambar 作为一款强大的文档搜索引擎,提供了对多种语言的支持,包…...
CANoe项目里DBC文件多了怎么办?一个CAPL函数教你轻松管理和遍历
CANoe多DBC文件管理实战:用CAPL实现智能遍历与动态配置 在车载网络测试领域,随着ECU数量增加和网络拓扑复杂化,单个CANoe工程往往需要加载多个DBC文件已成为常态。当项目规模扩大到包含数十个ECU、跨CAN/LIN/Ethernet多种总线时,D…...
非均匀网格Poisson求解器优化与GPU加速实践
1. 非均匀网格Poisson求解器的核心挑战在计算流体力学(CFD)领域,Poisson方程求解是压力投影方法中的关键瓶颈步骤。传统求解器如快速傅里叶变换(FFT)和几何多重网格(MG)在均匀网格上表现出色,但当面对非均匀网格时——这在壁面湍流等需要高分辨率边界层的…...
深度体验Cursor:AI代码编辑器的核心功能、实战技巧与避坑指南
1. 从零到一:深度体验AI代码编辑器Cursor作为一名在开发一线摸爬滚打了十多年的程序员,我几乎见证了代码编辑器的整个进化史。从最初的记事本、到功能强大的IDE,再到如今集成AI的智能编辑器,每一次工具的革新都实实在在地改变了我…...
DDR5内存核心技术解析与三大原厂产品横评
1. 内存技术演进与DDR5的时代意义我们正处在一个数据爆炸的时代,无论是个人电脑上的大型游戏、视频剪辑,还是数据中心里的人工智能训练、大数据分析,都对内存的带宽、容量和能效提出了前所未有的要求。正是在这样的背景下,DDR5内存…...
VMware Workstation Pro 17完整激活指南:免费获取专业虚拟化工具的终极方案
VMware Workstation Pro 17完整激活指南:免费获取专业虚拟化工具的终极方案 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major …...
魔兽争霸3终极优化指南:WarcraftHelper完全使用教程
魔兽争霸3终极优化指南:WarcraftHelper完全使用教程 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电脑上运行…...
wxauto架构深度解析:从UI自动化原理到企业级应用实战
wxauto架构深度解析:从UI自动化原理到企业级应用实战 【免费下载链接】wxauto Windows版本微信客户端(非网页版)自动化,可实现简单的发送、接收微信消息,简单微信机器人 项目地址: https://gitcode.com/gh_mirrors/w…...
大模型落地卡点全破解:奇点智能大会实测的7款工程化工具深度对比
更多请点击: https://intelliparadigm.com 第一章:大模型工程化工具推荐:奇点智能大会 在2024年奇点智能大会上,多家前沿AI基础设施团队联合发布了面向大模型全生命周期的开源工程化工具链。这些工具聚焦于模型微调、推理优化、可…...
《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》031、设备树与硬件描述:从寄存器到设备模型的映射
031、设备树与硬件描述:从寄存器到设备模型的映射 一次让我熬夜到凌晨三点的设备树调试 去年做一款基于i.MX6ULL的工业控制器,外挂了一个SPI接口的ADC芯片——AD7689。硬件设计没问题,原理图确认了三遍,PCB打样回来焊接完,上电。结果呢?SPI读回来的数据全是0xFF。 我第…...
