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

Git-概念与架构

GIT-概念与架构

  • 一、背景和起源
  • 二、版本控制系统
    • 1.版本控制分类
      • 1.1 集中式版本控制
      • 1.2 分布式版本控制
    • 2.Git和SVN对比
      • 2.1 SVN
      • 2.2 GIT
  • 三、GIT框架
    • 1.工作区(working directory)
    • 2.暂存区(staging area)
    • 3.本地仓库(local repository)
    • 4.远程仓库(remote repository)
    • 5.隐藏区(stash area)
    • 6.远程仓库副本(remote repository copy)
  • 四、GIT开发工作流程
  • 总结
      • 参考

一、背景和起源

2005年之前Linux内核开发都是由非开源BitKeeper进行版本控制。Linus Torvalds为了摆脱非开源的限制问题,构建了一个与开源的并发版本系统SVN理念完全相反的版本控制系统。这个分布式的版本控制系统最后发展成了现在广泛使用的git。

二、版本控制系统

1.版本控制分类

1.1 集中式版本控制

版本库是集中存放在中央服务器,开发者使用电脑进行开发工作。每次工作都需要先从中央服务器获取代码最新版本到本地,本地修改之后需要推送到中央服务器上。

1.2 分布式版本控制

版本库没有中央服务器概念,远程仓库只是为了开发者方便交换各自的修改。每个开发者电脑上都有一个完整的版本库。每次工作不需要联网,可以进行修改、版本对比、提交代码等,只需要在联网的时候将本地版本库同步到远程仓库即可。

2.Git和SVN对比

2.1 SVN

  • SVN属于集中式版本控制系统
  • SVN需要联网才能工作
  • SVN操作需要访问中央服务器仓库,处理速度相对慢

2.2 GIT

  • GIT属于分布式版本控制系统
  • GIT不需要强制联网也可工作
  • GIT绝大部份操作都是访问本地版本库,因此处理速度快

三、GIT框架

GIT架构主要分为以下几个部份:

  • 本地工作区(working directory)
  • 暂存区(staging area)
  • 本地仓库(local repository)
  • 远程仓库(remote repository)

整体架构如下图:
在这里插入图片描述

1.工作区(working directory)

工作区就是本地工作目录,工作区包含新增文件和自己的修改内容。

2.暂存区(staging area)

暂存区是将修改提交到本地仓库前的一个过渡区域,主要是方便可以将部分修改提交的情况。工作目录下.git目录下的index文件就是暂存区内容。

  • git add命令可以将工作区内容添加到暂存区。
  • git checkout命令可以将暂存区内容覆盖工作区内容。

3.本地仓库(local repository)

版本控制系统保存在本地。工作目录下.git目录就是本地仓库内容。

  • git commit命令可以将暂存区内容添加到本地仓库。
  • git reset命令可以将本地仓库内容覆盖暂存区内容。

4.远程仓库(remote repository)

远程仓库主要是为了开发者交流修改而设置的一个中间仓库。

  • git push命令可以将本地仓库内容添加到远程仓库。
  • git pull命令可以将远程仓库内容拉取到本地仓库。

5.隐藏区(stash area)

隐藏区主要是为了将正在修改并且还没有提交的代码保存起来防止丢失,方便开发者进行多种开发任务的切换。如果遇到紧急情况,可以将当前任务的修改保存到隐藏区,然后开发者可以进行分支切换或者其他开发工作,完成紧急任务之后,可以从隐藏区恢复之前的修改继续原有开发工作。

  • git stash命令可以将工作区和暂存区内容添加到隐藏区。
  • git stash pop命令可以隐藏区内容恢复到工作区。

6.远程仓库副本(remote repository copy)

存在于本地的远程仓库的缓存。如需更新,可通过git fetch/pull命令获取远程仓库内容。使用fech获取时,并未合并到本地仓库,此时可使用git merge实现远程仓库副本与本地仓库的合并。

四、GIT开发工作流程

开发者利用git进行协作进行开发工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
    在这里插入图片描述

总结

主要介绍版本控制系统起源,git和svn简单对比,git的整体架构和开发工作流程。

参考

1.简书:GIT-概述与架构
2.Git版本管理原理
3.Git Book
4.Runoob git教程

相关文章:

  • Mistral 7B 比Llama 2更好的开源大模型 (四)
  • LeetCode算法题解(动态规划)|LeetCoed62. 不同路径、LeetCode63. 不同路径 II
  • 软考高项知识点 安全技术
  • 【Django-02】 Model模型和模型描述对象Meta
  • ubuntu 20.04安装 Anaconda教程
  • 01 DDD小传:领域驱动设计为什么这么火?
  • python接口自动化测试之接口数据依赖
  • 【python学习】基础篇-常用函数-sorted() 对可迭代对象进行排序
  • clusterProfiler包学习
  • 人工智能基础_机器学习040_Sigmoid函数详解_单位阶跃函数与对数几率函数_伯努利分布---人工智能工作笔记0080
  • Windows10下Maven3.9.5安装教程
  • 泛型编程:进阶的正确打开方式
  • Android WMS——输入系统管理(十七)
  • jmeter接口自动化部署jenkins教程详解
  • KT142C语音芯片搭配HAA2018功放,两个板子,一个声音正常一个没有声音
  • [deviceone开发]-do_Webview的基本示例
  • 10个确保微服务与容器安全的最佳实践
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • crontab执行失败的多种原因
  • E-HPC支持多队列管理和自动伸缩
  • ES6 ...操作符
  • Fundebug计费标准解释:事件数是如何定义的?
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript设计模式与开发实践系列之策略模式
  • mysql中InnoDB引擎中页的概念
  • node学习系列之简单文件上传
  • React-redux的原理以及使用
  • Vue2.0 实现互斥
  • VuePress 静态网站生成
  • 阿里云Kubernetes容器服务上体验Knative
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 力扣(LeetCode)22
  • 如何在 Tornado 中实现 Middleware
  • 微信公众号开发小记——5.python微信红包
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 仓管云——企业云erp功能有哪些?
  • # include “ “ 和 # include < >两者的区别
  • %@ page import=%的用法
  • (02)vite环境变量配置
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (算法设计与分析)第一章算法概述-习题
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)创业的注意事项
  • .gitignore文件设置了忽略但不生效
  • .NET Micro Framework 4.2 beta 源码探析
  • .net 调用php,php 调用.net com组件 --
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET的数据绑定
  • .net访问oracle数据库性能问题
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .net中生成excel后调整宽度