网站建设的技术有哪些方面卖摄影作品的网站
news/
2025/10/6 6:18:38/
文章来源:
网站建设的技术有哪些方面,卖摄影作品的网站,网页简洁模板,淘客网站开发视频教程系列文章目录
手把手教你安装Git#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解#xff1f;看完原理才能事半功倍#xff01; 系列文章目录一、Git 的特征1. 文件系统2. 分布式 二、GIT的术语1. 区域术语2. 名词术语1. 提交对象2. 分支3. HEAD4. 标签#xff0…系列文章目录
手把手教你安装Git萌新迈向专业的必备一步 GIT命令只会抄却不理解看完原理才能事半功倍 系列文章目录一、Git 的特征1. 文件系统2. 分布式 二、GIT的术语1. 区域术语2. 名词术语1. 提交对象2. 分支3. HEAD4. 标签TAG 3. 动作术语 三、Git 存储模型1. GIT 数据库2. 树对象3. 提交对象 总结 上一次我们简单介绍了为什么要用版本管理以及怎么安装Git以及基本认识为新手朋友们迈出了实操的第一步。而本期的内容其实笔者犹豫了很久到底是先讲GIT的模型和原理还是直接讲GIT常用命令? 最终笔者决定还是先从模型与原理下手不仅是它是命令的前提而且笔者发现虽然很多用GIT但只限于几个常用命令对其运行机制却知之甚少一旦出现问题就容易束手无策了难以处理所以本期我们还是先讲讲GIT的基础原理吧 作者简介战斧从事金融IT行业有着多年一线开发、架构经验爱好广泛乐于分享致力于创作更多高质量内容 本文收录于 GIT 专栏有需要者可直接订阅专栏实时获取更新 高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新欢迎指导 Zookeeper Redis kafka docker netty等诸多框架以及架构与分布式专题即将上线敬请期待 一、Git 的特征
1. 文件系统
我们都知道Git是个版本控制系统但是如果你深入了解其原理就不难发现它更像一个文件管理系统如果你使用过其他版本控制器不难发现它们的思路非常符合“版本控制”的逻辑它们记录的是一个初始文件以及后续对该文件的历次修改内容如下
而对于GIT则是把你每次的“提交”当作一次相机的“快门”GIT会为你把当时的全部文件内容都做一个快照然后进行存储这一系列的快照每一个快照展开都是完整的文件系统。 当然为了效率如果文件没有修改Git 不再重新存储该文件而是只保留一个链接指向之前存储的文件 2. 分布式
我们可以把上次的图继续拿来使用GIT的核心工作都是在本地完成的即其主要工作都聚焦在工作区到本地仓库这意味着即使我们离线了我们仍然能完成提交操作GIT仍然能忠实的记录下我们的操作记录而不像其他版本控制器断网后版本控制功能就失效了。 二、GIT的术语
在接触GIT的时候我们难免会接触到一些术语或概念我们先对术语做个解释如果你看了某些解释觉得一头雾水先别着急我们在下面会慢慢解释
1. 区域术语
GIT一共分为四个区域对于开发者来说由远到近依次为远程仓库、本地仓库、暂存区和工作区 远程仓库可以是GitHub、GitLab也可以是你自己的私有服务器包含项目所有的版本控制信息和文件历史记录。 本地仓库你电脑上的存储库它包含项目所有的版本控制信息和文件历史记录 暂存区也称为索引Index用于存储下一次提交时要包含哪些修改或变更。 工作区指项目的实际文件夹即我们日常编辑的文件夹。
我们之前讲了三个部分唯独没有讲暂存区。实际上我们的代码不能直接从工作区就到仓库去本地仓库只接收暂存区提供的内容所以我们的任何新增、修改实际上都要先加入到暂存区。
但是为什么这块暂存区存在感不强呢主要是因为我们现在的各种工具在自动维护比如我们添加文件时IDEA会自动弹窗当我们使用Tortoisegit时提交时会让我们勾选文件这些都让我们免于手动往暂存区进行手动添加自然其存在感就稍弱了 2. 名词术语
1. 提交对象
我们每次把暂存区的内容放入本地仓库称为一次提交产生一个提交对象也叫“提交点” 或 “提交”。
除了手动提交合并操作也会产生提交点提交点包含了前一个提交点位置、文件变更信息、变更人、变更时间等所有信息每个提交点都有自己的SHA-1哈希值作为唯一标志一般在图中用一个圈表示。因为提交点除了首次提交都会包含上一个提交点的地址所以在实例图里一般呈链表状如下图就展示了三个提交点。 2. 分支
定义 一个指向某个提交对象的指针表示一个代码的分支。可以有多个分支并行开发不同的功能或版本
对于分支这个概念在讲解之前如果你看过其他的教程可能会经常看到类似下面的图 这样的话你会认为这里有两个分支一个是由C D E构成一个是F G构成。的确这里是有两个分支不假但这张图更具体的样子应该是这样子 分支并不是树枝图中真正的分支其实只是两个指针如图分支iss94指向提交点G分支master指向提交点E理解了这个概念你才能明白为什么Git鼓励大家遇事不决就建立各种分支。在其他版本控制器中拉个分支可能意味着所有的代码都要复制一遍而在GIT中仅仅是建立一个指针。
聪明的你可能想到了一个问题建分支 建指针那岂不是当我建分支的时候会产生两个指针指着同一个节点此时如果我再次提交内容岂不是乱了套这个节点会算在哪个分支上这时候就要用到另一个概念 HEAD
3. HEAD
定义HEAD是一个特殊的指针它指向当前所在的分支或提交。一般情况下HEAD指向当前所在分支的最新提交。
没错HEAD也是个指针而且指向分支如果你没有忘记分支也是个指针的话那你应该能想象出下面的图例 这代表着HEAD指向了master分支我们把前面分支的知识结合起来现在如果我们想建立个名叫 iss95 的分支图就会变成这样子 如果此时我们再进行一次提交会变成什么样呢 所以你应该明白HEAD的作用了它代表着你下次提交的位置此处它指向master所以我们的提交是提交至分支master上的。提交后master指针自动移到C的位置。而iss95则没有任何变化还是指向B。
严谨的小伙伴可能注意到我们定义中说了一句 一般情况下HEAD指向当前所在分支的最新提交。那HEAD能指向历史提交吗
答案是肯定的我们可以使用 git checkout commit 命令将HEAD移动到某个历史提交点如下图
4. 标签TAG
定义在 Git 中Tag是一种重要的版本控制工具它们是一些永久性的指针指向某个特定的提交commit常用于代码发布、版本管理以及历史记录的标记等操作 . 简而言之标签也是一个指针只是这个指针不像分支 或 HEAD 一样它是不会移动的我们可以看到JDK源码中就有大量的标签用以标记节点
3. 动作术语 添加 Add: 将工作目录的文件加入暂存区可以只选择部分文件进行添加 提交Commit将暂存区的内容放入本地仓库每个提交都有唯一的ID。 合并Merge将两个或多个分支的修改合并到一起。 拉取Pull将远程仓库的修改拉取到本地仓库并更新工作区。 推送Push将本地仓库的修改推送到远程仓库。 检出Checkout切换某个分支并同时切换工作目录。
如果前面你都学会了相信这几个动作你应该能理解它们之前能汇聚成下面这张关系图
当然这些命令实际上并不仅仅这么简单比如 Checkout 不仅可以切换分支还可以跟文件名以 git checkout file-name 来还原文件。但是这些我们留到下一篇文章再讲解。 三、Git 存储模型
1. GIT 数据库
前面我们三番五次的把 GIT 说成更像文件系统这是很合理的。甚至可以说GIT是一个数据库其实它的核心确实就是一个键值对数据库你可以向 Git 仓库中插入任意类型的内容它会返回一个唯一的键通过该键可以在任意时刻再次取回该内容 $ echo ‘test content’ | git hash-object -w --stdin d670460b4b4aece5915caf5c68d12f560a9fe3e4 如上我们把标准输入内容 “test content” 存储进GIT它就会返回给我们一个40字符的 SHA-1 哈希值我们可以用这个值重新获取存进去的内容 $ git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4 test content 但注意使用这种方式存入文件返回的只有文件内容等于说文件名我们丢失了而文件名的遗失对于文件系统来说是非常不合理的。所以我们还需要树
2. 树对象
比方说我们有一个简单的目录目录下有两个文件README 以及 Rakefile并且还有个子目录liblib里有个文件simplegit.rb。那么当我们把这个目录及其所有文件纳入GIT管理时其形态是这样的 它会把我们的文件存储成blob对象目录变成tree对象。tree对象可以存文件信息blob对象存文件内容而且tree对象还能下辖另一个tree对象这就和我们目录下还有子目录是一样的。如此一来我们就可以把我们想存放的目录及其文件以一棵树的形式完整的存入GIT中了。存是存进去了但这仅仅是一次保存存进去最多说GIT保存了我这个目录那么它的版本控制又体现在哪呢
3. 提交对象
我们上面说了整个目录能变成一个 Tree 对象存入GIT它是什么时候情况下会存呢其实就是GIT执行提交命令的时候当我们提交时GIT会把我们整个工作目录的所有文件汇聚成一个Tree并且把这个Tree的引用放进一个提交对象中进行存储。 也就是说如上图每一个圈提交对象不仅有本次提交人、提交时间等信息、而且还指向着一个Tree所以提交对象实际上就是一个快照
如上图三次提交实际上构成了一个不断往上摞的切面为啥说是切面是因为每一个切面都包含着一棵树也就是当时整个目录的内容。因此信息量其实是很多的。当然提交对象、和树对象或者文件对象一样都会存进GITGIT也会返回一个40长度的 SHA-1 哈希值。
这样当我们查询提交历史时查询到的就是所有过往的提交对象的信息如果我们确定某个提交对象后我们就能通过该提交对象的 SHA-1 哈希值能找回当时所有的文件
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon schacongee-mail.com
Date: Mon Mar 17 21:52:11 2008 -0700changed the version numbercommit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon schacongee-mail.com
Date: Sat Mar 15 16:40:33 2008 -0700removed unnecessary testcommit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon schacongee-mail.com
Date: Sat Mar 15 10:31:28 2008 -0700first commitPSTree对象不是压缩包它只是存储着当时那些文件对象的引用。另外提交时形成的Tree并不是把所有的文件全部又做一遍保存然后把引用放进Tree而是只保存改动或新增的文件那些没有改动过的文件已经存过了不会再存所以不用过分担心空间问题。 总结
本次我们比较形象的讲解了GIT的运行机制及存储模型如果你意犹未尽或对GIT想了解更多也可以去官方的文档做更深入的了解我把它的地址放在这里 官方中文文档 而对于大部分读者本文中所说的内容已经足够支持我们后面的学习那么下次我们就可以正式开始学习GIT的命令以及各种应用了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929030.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!