当前位置: 首页 > news >正文

【书籍篇】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 学习指南&#xff08;一&#xff09;基础概念及入门 一. 基本概念1.1 分布式版本控制1.1.1 集中式版本控制系统1.1.2 分布式版本控制系统1.1.3 特型版本库 1.2 版本库&#xff0c;分布式工作的基础所在1.2.1 散列值 1.3 分支的创建与合并1.3.1 分支的其他操作 二. 入门2.1 …...

JWT知识点

什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7519).该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景。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 是本地创建的套接字描述符&#xff0c;buff 指向本地的缓存&#xff0c;nbyt…...

Redisson 分布式锁实战应用解析

文章目录 前言一、Redisson介绍二、Redisson的使用1.1 引入依赖1.2 编写配置1.3 示例测试_011.4 示例测试_02 三、Redisson源码分析2.1 加锁源码2.2 看门狗机制 前言 分布式锁主要是解决分布式系统下数据一致性的问题。在单机的环境下&#xff0c;应用是在同一进程下的&#x…...

【机器学习】对比学习(contrastive learning)

对比学习是一种机器学习技术&#xff0c;算法学习区分相似和不相似的数据点。对比学习的目标是学习数据的表示&#xff0c;以捕捉不同数据点之间的基本结构和关系。 在对比学习中&#xff0c;算法被训练最大化相似数据点之间的相似度&#xff0c;并最小化不相似数据点之间的相似…...

开源和闭源的优劣势比较

开源与闭源软件之争一直是技术领域一个备受关注的话题&#xff0c;而在近期特斯拉CEO马斯克的表态中&#xff0c;关于开源的讨论更是引发了广泛的关注。以下是一些关于开源和闭源的优劣势以及对未来大模型发展的一些见解&#xff1a; 开源软件的优势&#xff1a; 创新与合作&a…...

html手势密码解锁插件(附源码)

文章目录 1.设计来源1.1 界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134534785 html手势密码解锁插件(附源码)&#xff0c;仿手机手势密码&#xff0c;拖动九…...

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)汇总

我所在的岗位是网络运维&#xff0c;路由与交换用的比较多&#xff0c;外网技术比较少。所以把经常用的写的比较详细。大家多多包涵。 理论部分 网络基础&#xff1a;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++进阶之路】第八篇:智能指针

文章目录 一、为什么需要智能指针&#xff1f;二、内存泄漏1.什么是内存泄漏&#xff0c;内存泄漏的危害2.内存泄漏分类&#xff08;了解&#xff09;3.如何检测内存泄漏&#xff08;了解&#xff09;4.如何避免内存泄漏 三、智能指针的使用及原理1.RAII2.智能指针的原理3.std:…...

保护服务器免受攻击:解析攻击情境与解决之道

在数字化时代&#xff0c;服务器安全问题日益突出&#xff0c;因为它们是企业和个人网络活动的核心。服务器被攻击可能引发一系列问题&#xff0c;理解攻击的不同情境以及采取相应的解决方法变得至关重要。 DDoS 攻击&#xff08;分布式拒绝服务攻击&#xff09; 情境&#xff…...

Python 获取两个数组中各个坐标点对之间最短的欧氏距离

Python 获取两个数组中各个坐标点对之间最短的欧氏距离 代码如下: import numpy as np from scipy import spatialxy1 = np.array([[243, 3173],[525, 2997]]...

假ArrayList导致的线上事故......

假ArrayList导致的线上事故… 线上事故回顾 晚饭时&#xff0c;当我正沉迷于排骨煲肉质鲜嫩&#xff0c;汤汁浓郁时&#xff0c;产研沟通群内发出一条消息&#xff0c;显示用户存在可用劵&#xff0c;但进去劵列表却什么也没有&#xff0c;并附含了一个视频。于是我一边吃了排…...

K8S精进之路-控制器Deployment-(1)

在K8S中&#xff0c;最小运行单位为POD,它是一个逻辑概念&#xff0c;其实是一组共享了某些资源的容器组。POD是能运行多个容器的&#xff0c;Pod 里的所有容器&#xff0c;共享的是同一个 Network Namespace&#xff0c;并且可以声明共享同一个 Volume。在POD中能够hold住网络…...

flutter iOS 视频mov格式转MP4格式

flutter iOS 视频mov格式转MP4格式 前言一、使用video_compress压缩视频总结 前言 今天在写项目的时候&#xff0c;突然发现iOS 里面的有些视频格式是mov的格式&#xff0c;这就导致在视频播放组件无法播放的问题&#xff0c;期间试过替换视频格式&#xff0c;但是又不想存储文…...

datafilecopy header validation failure for file +DATA/orcl/datafile/file1.ora

环境 linux 6.8 oracle 11.2.0.4 rac 未打补丁 现象&#xff1a; 数据库日志中显示 datafilecopy header validation failure for file DATA/orcl/datafile/file1.ora原因 用rman的backup as copy 对数据文件进行了copy或者叫位置更改时候&#xff0c;在sqlplus中对文件名进行…...

[机缘参悟-119] :一个IT人的反思:反者道之动;弱者,道之用 VS 恒者恒强,弱者恒弱的马太效应

目录 前言&#xff1a; 一、道家的核心思想 二、恒者恒强&#xff0c;弱者恒弱的马太效应 三、马太效应与道家思想的统一 3.1 大多数的理解 3.2 个人的理解 四、矛盾的对立统一 前言&#xff1a; 马太效应和强弱互转的道家思想&#xff0c;都反应了自然规律和社会规律&…...

CentOS用nginx搭建文件下载服务器

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动。在工作中&#xff0c;我们经常会用到需要搭建文件服务器的情况&#xff0c;这里就以在linux下搭…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...