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

分布式版本控制工具软件——Git概述

目录

  • 一、Git概述
    • 1.为什么要学习Git?
      • (1)SCM概念
      • (2)SCM实现
    • 2.什么是版本控制?
      • (1)版本控制软件的基础功能
      • (2)集中式版本控制
      • (3)分布式版本控制
    • 3.为什么要选择Git?
      • (1)分布式版本控制
      • (2)高效的分支和合并机制
      • (3)速度和性能
      • (4)广泛的应用
      • (5)强大的社区和生态系统
  • 二、Git的安装
    • 软件安装
    • 客户端的安装

一、Git概述

官网:https://git-scm.com/官网链接
在这里插入图片描述

Git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型或大型的各种项目。Git易于学习,占用空间小,性能强大。

在这里插入图片描述

1.为什么要学习Git?

(1)SCM概念

  • SCM(Software Configuration Management)是一种软件工程领域的概念,用于管理软件项目中的配置项和变更,以确保团队成员能够协同工作并追踪项目的演变。SCM 通常涉及版本控制、配置管理、构建管理、发布管理等方面的工作。

  • CMM(Capability Maturity Model )能力成熟度模型作为评价一个大中型软件开发过程是否正确,合理,有效的重要手段,提供了不同等级的标准流程,对软件开发过程(流程)进行了约束和建议,。

  • 作为CMM 2级的一个关键域(Key Practice Area,KPA),SCM软件在整个软件的开发活动中占有很重要的位置。

(2)SCM实现

  • SCM 是一种概念,用于管理软件项目中的配置项和变更。
  • 而 Git 则是 SCM 概念的一个具体实现,它提供了一套工具和机制来管理源代码、跟踪变更、协作开发等,从而实现了 SCM 的功能。

2.什么是版本控制?

  • 一般情况下,一份文件,无论是DOC办公文档,还是编程源码文件,我们都会对文件进行大量的修改和变更。
  • 但是我们无法保证每一次的修改和变更都是正确并有效的,往往有的时候需要追溯历史操作,而版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
  • 没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

在这里插入图片描述

(1)版本控制软件的基础功能

  • 1.保存和管理文件

    • 将文件存储在版本控制系统中,并记录文件的历史变更。
    • 提供对文件的增加、修改和删除操作,并记录这些变更。
    • 每个文件的不同版本进行组织和管理,以便开发者能够轻松地查找和访问历史版本。
      在这里插入图片描述
  • 2.提供客户端工具进行访问

    • 提供命令行界面(CLI)和图形用户界面(GUI)等不同的客户端工具,以便开发者能够方便地访问和操作版本控制系统。
    • 客户端工具通常提供文件的检出(checkout)、提交(commit)、更新(update)等操作,以及查看文件历史、比较文件差异等功能。
      在这里插入图片描述
  • 3.提供不同版本文件的比对功能
    在这里插入图片描述

    • 提供比较文件不同版本之间的差异和变更。
    • 支持文件版本之间的对比,以便开发者可以查看文件的修改历史和变更详情。
    • 提供可视化的比对工具,帮助开发者更直观地理解文件的变更情况,并进行决策和调整。

(2)集中式版本控制

集中式版本控制是一种传统的版本控制系统,它与分布式版本控制系统相对。

在集中式版本控制系统中,所有的版本信息和文件都存储在一个中央服务器上,而开发者通过客户端工具与中央服务器进行交互。

一些著名的集中式版本控制系统包括 CVS(Concurrent Versions System)和 SVN(Apache Subversion)等。

集中式版本控制系统的特点和基本原理:

  • 1.中央化存储:所有的文件和版本信息都存储在中央服务器上,开发者通过与中央服务器进行交互来管理和获取文件。

  • 2.客户端-服务器架构:开发者使用客户端工具来与中央服务器进行通信和操作。这些客户端工具通常提供文件的检出、提交、更新等基本操作。

  • 3.依赖网络连接:开发者需要与中央服务器保持网络连接才能进行版本控制操作,因为所有的文件和版本信息都存储在中央服务器上。

  • 4.协作和分支管理:集中式版本控制系统通常提供基本的协作和分支管理功能,但相对于分布式版本控制系统来说,这些功能可能不够灵活和强大。

  • 5.版本冲突:由于所有的开发者都是直接与中央服务器进行交互,因此可能会出现版本冲突的情况。当多个开发者同时修改同一个文件时,可能会导致冲突,需要手动解决。

虽然集中式版本控制系统在过去被广泛使用,并且仍然在一些项目中被采用,但随着分布式版本控制系统(如 Git)的兴起,它的使用逐渐减少。分布式版本控制系统具有更加灵活、高效和安全的特性,逐渐成为了主流。

在这里插入图片描述
集中式版本控制系统的一些主要缺点:

  • 1.单点故障:集中式版本控制系统依赖于中央服务器,如果中央服务器发生故障或者不可用,那么团队将无法进行代码的提交、更新或者检出操作,从而导致工作停滞。
  • 2.网络依赖:由于所有的版本信息都存储在中央服务器上,开发者需要通过网络连接才能进行版本控制操作。如果网络连接不稳定或者中断,开发者将无法进行代码操作,导致开发效率下降。
  • 3.性能瓶颈:随着项目规模的增大和团队人数的增加,中央服务器可能会成为性能瓶颈,导致代码操作的速度变慢,特别是在需要频繁提交和更新代码的情况下。
  • 4.版本冲突:由于所有的开发者都是直接与中央服务器进行交互,因此可能会出现版本冲突的情况。当多个开发者同时修改同一个文件时,可能会导致冲突,需要手动解决。
  • 5.不利于分布式团队:集中式版本控制系统更适合集中式团队,而对于分布式团队或者远程团队来说,由于依赖于中央服务器,可能会导致协作效率降低。

(3)分布式版本控制

分布式版本控制系统(Distributed Version Control System,DVCS)是一种版本控制系统,与传统的集中式版本控制系统相比,它具有分散存储和本地操作的特点。

分布式版本控制系统的特点和基本原理:

  • 1.分散存储:每个开发者都拥有完整的代码仓库的副本,而不仅仅是对中央服务器的一个连接。这意味着每个开发者都可以在本地进行版本控制操作,而不需要依赖网络连接。

  • 2.本地操作:开发者可以在本地进行提交、分支、合并等版本控制操作,而不需要每次都与中央服务器进行通信。这样可以提高操作的速度和效率,并且在没有网络连接的情况下仍然能够进行版本控制操作。
    在这里插入图片描述

  • 3.强大的分支管理:分布式版本控制系统通常提供更加灵活和强大的分支管理功能。开发者可以轻松创建、合并、删除分支,从而支持各种复杂的开发工作流程。

  • 4.高度安全:由于每个开发者都拥有完整的代码仓库的副本,因此即使中央服务器发生故障或遭受攻击,代码仓库仍然可以通过其他开发者的副本进行恢复和重建。

  • 5.适合分布式团队:分布式版本控制系统特别适合分布式团队或远程团队的协作开发。每个团队成员都可以在本地进行版本控制操作,并且可以轻松地共享和同步代码变更。


3.为什么要选择Git?

(1)分布式版本控制

  • Git 是一种分布式版本控制系统,每个开发者都可以在本地拥有完整的代码仓库,并且可以独立地进行开发和提交。
  • 这种分布式的特性使得团队能够更加灵活地工作,不会受到中央服务器的限制,也更容易应对网络故障等情况。

(2)高效的分支和合并机制

  • Git 提供了强大而灵活的分支和合并功能,使得开发团队可以轻松地创建、管理和合并分支。
  • 这使得团队能够同时进行多个特性的开发,而不会相互干扰,同时也能够更容易地进行代码审查和版本控制。

(3)速度和性能

  • Git 被设计为高效和快速的版本控制系统,在处理大型代码仓库和大量文件时表现优异。
  • 它使用了一些优化算法和数据结构,使得提交、分支操作等操作都能够在很短的时间内完成。
  • Git软件比SubversionCVSPerforceClearCase等SCM(Software Configuration Management软件配置管理)工具具有性价比更高的本地分支、方便的暂存区域和多个工作流等功能。

在这里插入图片描述

(4)广泛的应用

  • Git 已经成为了业界标准的版本控制系统之一,许多知名的开源项目和企业都在使用 Git 进行版本控制和团队协作。
    在这里插入图片描述

(5)强大的社区和生态系统

  • Git 是一个开源项目,拥有庞大的社区和活跃的开发者社群。
  • 这意味着你可以轻松地找到大量的教程、文档和插件来帮助你学习和使用 Git,同时也能够从社区中获得支持和解决问题。


二、Git的安装

软件安装

下载地址:https://git-scm.com/downloads

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
验证是否安装成功

在Windows桌面空白处,点击鼠标右键,弹出右键菜单

选择Git Bash Here菜单, 选择后,Windows系统弹出Git软件的命令行黑窗口
在这里插入图片描述

窗口弹出后,可以输入Git软件的操作指令。此时我们使用键盘输入操作指令:git -v或 git --version,查看当前Git软件的安装版本。

git -v
git --version

输入指令回车后,如果黑窗口中打印出咱们安装的软件版本2.40.0,Git软件安装成功了。
在这里插入图片描述


客户端的安装

下载地址:https://desktop.github.com/
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


推荐一个练习 Git 网站
https://learngitbranching.js.org/

相关文章:

分布式版本控制工具软件——Git概述

目录 一、Git概述1.为什么要学习Git?(1)SCM概念(2)SCM实现 2.什么是版本控制?(1)版本控制软件的基础功能(2)集中式版本控制(3)分布式版…...

【一百零八】【算法分析与设计】P1908 逆序对,P1637 三元上升子序列,树状数组区间和应用

P1908 逆序对 逆序对 题目描述 猫猫 TOM 和小老鼠 JERRY 最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计。 最近,TOM 老猫查阅到一个人类称之为“逆序对”的东西,这东西…...

【RK3568】制作Android11开机动画

Android 开机 logo 分为两种:静态显示和动态显示。静态显示就是循环显示一张图片;动态显示就是以特定帧率顺序显示多张图片 1.准备 android logo 图片 Android logo最好是png格式的,因为同一张图片的情况下,png 格式的比 jpg和b…...

chrony内网同步服务器时间

当前需要在10.26.24.62和10.26.24.61两个服务器上设置chrony同步时间,其中10.26.24.62为NTP时间服务器,10.26.24.61去10.26.24.62同步时间 检查Chrony配置文件: 确认10.26.24.62(NTP服务器)的配置文件 /etc/chrony/c…...

SSM物流管理系统的设计与实现-计算机毕业设计源码44323

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作…...

STM32CubeIDE使用过程记录

最近在做一款机器人的开发,使用到了STM32CubeIDE,这里记录一些使用技巧方便后续查阅。 STM32CubeIDE使用过程记录 快捷键开启代码自动补全功能看门狗设置CRC设置IO口取反定时器设置 及 定时器中断外部中断GPIO配置STC15单片机GPIO模式配置片内闪存&#…...

angular2开发知识点

目录 文章目录 一、API 网关地址 配置二、服务注册使用三、模块组件注册使用四、html中style类动态绑定1. 单个类的绑定:[class.special]"isSpecial"2. 多个类的绑定:[ngClass]"{selected:status ,saveable: this.canSave,}"3. 单个…...

【机器学习】机器学习与智能交通在智慧城市中的融合应用与性能优化新探索

文章目录 引言机器学习与智能交通的基本概念机器学习概述监督学习无监督学习强化学习 智能交通概述交通流量预测交通拥堵管理智能信号控制智能停车管理 机器学习与智能交通的融合应用实时交通数据分析数据预处理特征工程 交通流量预测与优化模型训练模型评估 智能信号控制与优化…...

走的人多了,也便成了路(七)

好多年前就听到这样的说法:一流的企业做标准,二流的企业做品牌,三流的企业做产品。 在通信行业待久了,经历了移动通信技术标准的发展历程,体会到很多事情没有那么神秘,甚至由于一些偶然因素的出现&#xff…...

UE5中在地形中加入湖、河

系统水资产添加 前提步骤123 完成 前提 使用版本 UE5.0.3,使用插件为UE内置的Water和water Extras. 步骤 1 记得重启 2 增加地形&#xff0c;把<启用编辑图层>勾选 如果地形没有勾选上编辑图层&#xff0c;那么就会导致湖、河等水景象无法融入地形。 如果忘记勾选…...

【280个shell脚本】----提示运维工作效率

1.MySQL 数据库备份单循环 #!/bin/bash DATE$(date %F_%H-%M-%S) HOSTlocalhost USERbackup PASS123.com BACKUP_DIR/data/db_backup DB_LIST$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema…...

从零开始搭建Electron项目之运行例程

最好的学习方式就是&#xff1a;给一段能够运行的代码示例。 本文给出了例程资源&#xff0c;以及运行的步骤。 在国内开发electron有一点特别不好&#xff0c;就是如果不爬梯子&#xff0c;下载依赖容易出错。 一、例程资源 到如下路径下载例程到本地。 GitCode - 全球开发者…...

MySQL逻辑备份

目录 一.mysqldump 基本命令&#xff1a; 参数选项&#xff1a; 示例 备份整个数据库 备份多个数据库 备份所有数据库 仅备份数据库结构 仅备份特定表 添加选项以有效处理锁表问题 恢复数据 恢复数据库 恢复库中的表 使用source恢复 注意事项 二. mysqlpu…...

python 获取网页链接图片

python 获取 网页图片 在Python中&#xff0c;可以使用requests库获取网页内容&#xff0c;再使用BeautifulSoup解析网页&#xff0c;提取图片链接&#xff0c;最后保存图片到本地。以下是一个简单的例子&#xff1a; import requests from bs4 import BeautifulSoup import o…...

Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…...

文刻ai工具跟绘唐AI工具有什么区别

文刻AI工具和绘唐AI工具是两种不同的人工智能工具。点击查看 文刻AI工具是一种自然语言处理工具&#xff0c;可以用于生成、修改和校对文本。它可以帮助用户更高效地写作&#xff0c;提供词汇和语法建议&#xff0c;检查拼写和语法错误&#xff0c;并提供自动补全和自动纠正功…...

手写kNN算法的实现-用欧几里德空间来度量距离

kNN的算法思路&#xff1a;找K个离预测点最近的点&#xff0c;然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离&#xff0c;关于这个距离&#xff0c;我们用欧几里德距离来度量&#xff08;其实还有很多…...

IGraph使用实例——线性代数计算(blas)

1 概述 在图论中&#xff0c;BLAS&#xff08;Basic Linear Algebra Subprograms&#xff09;并不直接应用于图论的计算&#xff0c;而是作为一套线性代数计算中通用的基本运算操作函数集合&#xff0c;用于进行向量和矩阵的基本运算。然而&#xff0c;这些基本运算在图论的相…...

【MySQL】(基础篇五) —— 排序检索数据

排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句&#xff0c;根据需要排序检索出的数据。 排序数据 还是使用上一节中的例子,查询employees表中的last_name字段 SELECT last_name FROM employees;输出结果&#xff1a; 发现其输出并没有特定的顺序。其实&#xf…...

C++ C_style string overview and basic Input funcitons

write in advance 最近在做题&#xff0c;遇到一个简单的将console的输入输出到文件中的简单题目&#xff0c;没有写出来。悔恨当初没有踏实地总结string 相关的 I/O 以及与文件的操作。这篇文章旨在记录基础的字符I/O, 简单常用的文件I/O操作函数。 当然&#xff0c;你会说C…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...