【书籍篇】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,如需更多详细内容请购买正版书籍
下一章节:


一. 基本概念

1.1 分布式版本控制

1.1.1 集中式版本控制系统

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(-)

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

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

相关文章

UE 调整材质UV贴图长宽比例

首先&#xff0c;为什么要先减去0.5呢&#xff0c;因为缩放的贴图中心在0,0原点&#xff0c;以这个点缩放效果是这样&#xff1a; 它缩放的图案不会在正中间&#xff0c;因为是以0,0点进行缩放的 以这个图的箭头去缩放图片的&#xff0c;所以不能使得缩放后的图片放在正中心 那…

【机器学习】038_梯度消失、梯度爆炸

一、原因 神经网络梯度 假设现在有一个 层的神经网络&#xff0c;每层的输出为一个对输入作 变换的函数结果 用 来表示第 层的输出&#xff0c;那么有下列公式&#xff1a; 链式法则计算损失 关于某一层某个参数 的梯度&#xff1a; 注意到&#xff0c; 为向量&am…

NX二次开发UF_CAM_ask_post_template_name 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_ask_post_template_name Defined in: uf_cam.h int UF_CAM_ask_post_template_name(const char * * post_template_filename ) overview 概述 This function provides the name of the file…

git 提交成了LFS格式,如何恢复

平常习惯使用sourceTree提交代码&#xff0c;某次打开时弹出了一个【是否要使用LFS提交】的确认弹窗&#xff0c;当时不知道LFS是什么就点了确认&#xff0c;后续提交时代码全变成了这个样子 因为是初始化的项目首次提交&#xff0c;将近四百个文件全被格式化成了这个样子&…

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

现代企业有不少都完成了数字化的转型&#xff0c;而还未转型的企业或商铺也有进行数字化转型的趋势&#xff0c;由此可见&#xff0c;数据已经成为企业决策的重要依据。企业需要先获取数据&#xff0c;将业务系统数据同步至数仓进行整合&#xff0c;然后再进行数据分析。为了更…

Vatee万腾外汇市场新力量:vatee科技决策力

在当今数字化时代&#xff0c;Vatee万腾崭露头角&#xff0c;以其强大的科技决策力进军外汇市场&#xff0c;成为该领域的新力量。这一新动向将不仅塑造外汇市场的未来&#xff0c;也展现Vatee科技决策力在金融领域的引领作用。 Vatee万腾带着先进的科技决策力进入外汇市场&…

Java格式化类Format

文章目录 Format介绍Format方法- format&#xff08;格式化&#xff09;- parseObject&#xff08;解析&#xff09; 格式化分类日期时间格式化1. DateFormat常用方法getInstancegetDateInstancegetTimeInstancegetDateTimeInstance 方法入参styleLocale 2. SimpleDateFormat常…

Redis设计与实现-数据结构(建设进度15%)

Redis数据结构 引言数据结构stringSDS数据结构原生string的不足 hash 本博客基于《Redis设计与实现》进行整理和补充&#xff0c;该书依赖于Redis 3.0版本&#xff0c;但是Redis6.0版本在一些底层实现上仍然没有明显的变动&#xff0c;因此本文将在该书的基础上&#xff0c;对于…

【Android11】在内置的Tvsettings的界面中显示以太网Mac地址

【Android11】在内置的Tvsettings的界面中显示以太网Mac地址 了解Preference必要信息步骤&#xff1a;1. 在设置页面的xml文件中增加一个Preference &#xff0c;这是要显示出来的设置项2. 在strings.xml文件中增加我们在第一步新设置的值3. 为新加的设置项增加一个新的XXXPref…

CentOS7安装Docker遇到的问题笔记

笔记/朱季谦 以下是笔者本人学习搭建docker过程当中记录的一些实践笔记&#xff0c;过程当中也遇到了一些坑&#xff0c;但都解决了&#xff0c;就此记录&#xff0c;留作以后再次搭建时可以直接参考。 一、首先&#xff0c;先检查CentOS版本&#xff0c;保证在CentOS7版本以…

2023食药物质产业发展大会12月在浙江绍兴隆重召开

为更好地推动食药物质行业高质量发展&#xff0c;推进食药物质相关产品的创新应用&#xff0c;促进行业科技进步&#xff0c;提高行业技术水平&#xff0c;中国生物发酵产业协会定于12月15-17日在浙江省绍兴市召开“2023食药物质产业发展大会暨中国生物发酵产业协会食药物质专业…

C# 使用执行cmd命令遇到俄语乱码处理

设置执行cmd命令的ProcessStartInfo对象编码使用System.Text.Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);注册更多字符编码。 通过上面的方式&#xff0c;如果把语言项的Beta版&#xff1a;使用Unicode UTF-8 提供全球语言支持的选择去掉则正常。但是该功…

LeetCode669. Trim a Binary Search Tree

文章目录 一、题目二、题解 一、题目 Given the root of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in [low, high]. Trimming the tree should not change the relative structure of the …

Linux八股文

Linux八股文 第一章 Linux简介 Linux是一种多用户、多任务&#xff0c;支持多线程和多CPU的操作系统&#xff0c;具有免费、稳定、高效的优点&#xff0c;一般运行在大型服务器上。 1.1 常用目录 目录说明/根目录&#xff0c;有且仅有一个&#xff0c;一般只存放目录/home家目…

栈和队列知识点+例题

1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端成为栈顶&#xff0c;另一端成为栈底。遵守后进先出的原则&#xff08;类似于弹夹&#xff09; 压栈&#xff1a;栈的插入操…

C# 依赖注入IServiceCollection

在 C# 中&#xff0c;IServiceCollection 是 ASP.NET Core 中用于依赖注入的接口。依赖注入是一种设计模式&#xff0c;它允许对象之间的依赖关系由外部组件管理&#xff0c;而不是在对象内部直接创建它们的依赖项。IServiceCollection 接口用于注册和配置应用程序中的服务。 …

一文讲明 网络调试助手的基本使用 NetAssist

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

实战 - 在Linux上部署各类软件

前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;但是并没有一些具体的实操能够串联起来这些知…

Ubuntu18.04安装Moveit框架

简介 Moveit是一个由一系列移动操作的功能包组成的集成化开发平台,提供友好的GUI,是目前ROS社区中使用度排名前三的功能包,Moveit包含以下三大核心功能,并集成了大量的优秀算法接口: 运动学:KDL,Trac-IK,IKFast...路径规划:OMPL,CHMOP,SBPL..碰撞检测:FCL,PCD... 一、更新功…

全球地表水年度数据集JRC Yearly Water Classification History, v1.4数据集

简介&#xff1a; JRC Yearly Water Classification History, v1.4是一个对全球水资源进行分类的数据集&#xff0c;覆盖了1984年至2019年的时间范围。该数据集是由欧盟联合研究中心&#xff08;JRC&#xff09;开发的&#xff0c;使用的数据源是来自Landsat系列卫星的高分辨率…