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

Linux相关概念和重要知识点(7)(git、冯诺依曼体系结构)

1.git

(1)版本控制和版本控制器

当我们修改一个项目的时候,一般都会先留下一个备份再修改,并将修改的文件命名为第一次修改、第二次修改......当需要途中的任何版本,或是需要回退到之前的版本时,都能够找到备份的项目。因为所有的修改都被记录了下来了,所有版本都能找到,这就叫做版本控制。

如此一来,软件的每次修改都会被保存,v1、v2、v3...版本。如果某个版本出现了严重的问题,且短时间不能解决,开发人员可以快速回滚到上一个版本,将出现问题的新版本改好后再上线。回退是软件层面一个很严重的事故,但至少有退步的空间,能在出现问题时快速作出回应,而不会造成长时间软件不可用的状态

上述说到的先备份、再修改的版本控制在项目小、人员少时能手动控制,但人数一多就必须借助版本控制器(git、svn)。

(2)理解git是一个分布式的、去中心化的版本控制的版本控制器

git是一个版本控制器。我们需要建立一个仓库,git可以帮我们把数据提交到仓库里,也可以帮我们拉取。我们可以简单理解为,git是一个帮我们在仓库管理数据的软件。

借助git来进行版本管理有一个特点,就是每个人的电脑上都可以本地管理,在本地就有着完整的修改记录。我们可以只建立一个本地的仓库,然后用git管理,这样也省去我们自己手动管理的时间。但实际上,除了本地的仓库,远端仓库可以更好帮助我们保存数据,也有助于多人协同远端仓库和本地仓库本质上没有区别,在git看来都是仓库,以同样的方式提交或拉取数据。但远端仓库是保存在提供仓库的大型服务器上,本地仓库是在我们电脑上的。

Gitee和Gitub就有提供远端仓库的大型服务器(一般叫做代码托管平台),我们提交代码后可以到对应的网站去管理或查看它们,很方便,别人也可以直接从远端仓库将我们的代码pull下来,多人协同很方便。因为代码托管又是明显,很多大型企业也在用,也存在合作和资助的关系,这也体现出和开源一样的商业模式(其实git软件本身也是开源的)。

何为中心化?中心化是指所有数据的处理集中在大型服务器上,本地的数据强烈依赖大型服务器。在git这一套体系中,远端仓库确实聚集了很多数据,但本质上源数据都是在本地管理,本地包含所有版本信息,修改历史(本地才是数据的中心),只是最后上传保管,有的时候对协同工作有帮助而已(在服务器上新建一个目录)。换句话说,就算哪一天Gitee和Gitub突然出问题,远端仓库全部销毁了,git管理的本地仓库依然有全套数据和修改,我们换一个能提供远端仓库的服务器就好了。而如果是中心化、集中式管理,那么服务器一崩,所有数据都会丢失。

综上所述,git保证远端仓库和本地仓库同步,实现分布式、去中心化管理。

(3)git常用操作

①获取远端仓库:git clone (远端仓库路径),获取同时还会自动在本地新建一个仓库.git,用于本地和远端同步管理。

②提交流程:git add (文件路径)先将待提交文件添加到git暂存区index中。隐藏的目录.git中,可以找到这个index暂存区,index是一个特殊编码的文件,使用git自己的编码格式。add之后我们只能算是将文件临时添加到了git仓库中,但是可以选择放弃提交而不留痕迹。

git commit -m "(描述信息)"将暂存区数据提交到本地仓库,每次提交都有一个id值(版本链),这个时候仓库中修改数据、版本信息都会被保存。在.git的objects目录中我们可以看到版本管理,根据id可在里面找到信息,这个时候我们依然可以选择回退某些信息。

git push之后,本地仓库的数据就和远端仓库数据同步,此后想要回退就很复杂了。如果同步之前远端仓库的数据和本地相比有修改的话,那就先要先git pull先将云端数据同步下来才行。如果出现了冲突,即远端修改的那部分代码和本地编辑的代码在同一文件,则会都保存在一起,让我们自行处理(不会乱)。

③其余操作和文件

git status查看git仓库状态,也可以查看暂存区的文件信息

git log查看提交记录的日志

.gitignore里面存的是忽略上传的文件后缀,本地托管和远端仓库都不会被提交,可以节省一定资源

(4)git开源的意义

git整个软件开源(没有分客户端和服务器端),人们可以研究git源代码来实现一个能使用git来提交的服务器。这也是git通用于Gitee和Gitub的原因,它们是在git开源下做出的二次开发。并且git并没有分客户端和服务器端(server 和 client),维护起来也比较容易

2.冯诺依曼体系结构

冯诺依曼体系结构中计算机的基本原理是存储程序和程序控制。计算机为了完成指定数据处理,要按照指定流程完成指定功能,指令的合计就是一段程序。

SRAM、DRAM、Cache:SRAM是静态随机存取存储器,它不需要刷新就可以维持数据,并且和DRAM一样都凸显“随机”二字,和随机迭代器一样可以直接访问对应地址,存储位置几乎不影响存取时间。其中DRAM用于内存,SRAM用于Cache(高速缓存)。Cache集成在CPU中,不属于存储器。

CPU在数据层面上都是和DRAM打交道,而不会和硬盘打交道。因为硬盘和CPU比起来太慢了,会受到木桶效应限制,而内存是读取速度稍快,价格稍低的硬件,可以说DRAM极大降低了计算机的价格,是冯诺依曼体系结构中很重要的一环。任何程序运行的时候都必须从硬盘加载到内存,CPU不会直接访问外设,冯诺依曼体系结构决定程序必须先加载到内存中

数据在计算机内部流转时,本质是在不同设备间进行拷贝。如IO流(Inuput输入设备 -> 存储器,Output存储器 -> 输出设备)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python爬虫:从12306网站获取火车站信息
  • YOLOv9改进策略【注意力机制篇】| CVPR2024 CAA上下文锚点注意力机制
  • neo4j(spring) 使用示例
  • 如何快速上手一个Github的开源项目
  • 【深度】为GPT-5而生的「草莓」模型!从快思考—慢思考到Self-play RL的强化学习框架
  • vue组件的生命周期
  • 常用集合(Set等)
  • CTF夺旗赛经验总结及落地实践,零基础入门到精通,收藏这一篇就够了
  • 跟着问题学12——GRU详解
  • 应用targetSdkVersion升级指导
  • 探索C语言与Linux编程:获取当前用户ID与进程ID
  • 中秋节特别游戏:给玉兔投喂月饼
  • Mac端口扫描工具
  • C++——打印以下图案:用字符数组方法。
  • golang学习笔记28——golang中实现多态与面向对象
  • CentOS从零开始部署Nodejs项目
  • Docker 笔记(2):Dockerfile
  • iOS 系统授权开发
  • JavaScript新鲜事·第5期
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS数组方法汇总
  • JS学习笔记——闭包
  • Laravel核心解读--Facades
  • LintCode 31. partitionArray 数组划分
  • Otto开发初探——微服务依赖管理新利器
  • React中的“虫洞”——Context
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于webpack 的 vue 多页架构
  • 前端面试题总结
  • 前端面试总结(at, md)
  • 如何解决微信端直接跳WAP端
  • 删除表内多余的重复数据
  • 怎样选择前端框架
  • 最简单的无缝轮播
  • 2017年360最后一道编程题
  • 从如何停掉 Promise 链说起
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • (55)MOS管专题--->(10)MOS管的封装
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (二)学习JVM —— 垃圾回收机制
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)u-boot-nand.bin的下载
  • (转)C#调用WebService 基础
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***通过什么方式***网吧
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 反射 Reflect
  • .net 后台导出excel ,word
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)