Git 快速入门:全面了解与安装步骤

Git 快速入门:全面了解与安装步骤

一、关于Git

1.1 简介

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,最初是为了更好地管理 Linux 内核开发而设计。

Git用于跟踪计算机文件的变化,特别是源代码文件。它允许多个开发者同时合作开发软件项目,同时保留完整的版本历史,确保代码的稳定性和可追溯性。

49bb3ffa-b778-4762-8dd9-6888e442f461

在 2005 年,Linus Torvalds 迫切需要一个新的版本控制系统来维护 Linux 内核的开发。于是他花了一个星期的时间,从头开始编写了一个革命性的新系统,并将其命名为 Git。二十年之后,该平台成为了这个竞争激烈领域里面当之无愧的领导者。

在全球范围内,大量的初创企业、集体企业和跨国公司,包括谷歌和微软,使用 Git 来维护它们软件项目的源代码。它们中有些公司拥有自己的 Git 项目,有些公司则通过商业托管公司使用 Git,比如 GitHub(成立于 2007 年),Bitbucket(成立于 2010 年)和 GitLab(成立于 2011 年)。其中最大的 GitHub 拥有 4000 万注册开发者 并在 2018 年被微软以 75 亿美元的天价收购。

Git 的吸引力之一在于它是开源的(就像 Linux 和 Android 那样)。但是还有其它开源的 VSC,其中包括协作版本系统(CVS)、SVN、Mercurial 和 Monotone,因此单凭这一点并不足以解释它的优点。

关于 Git 市场主导地位的最好体现是 Stack Overflow 对开发人员的调查。调查结果显示,2018 年 74289 名受访者中有 88.4% 使用了 Git(高于 2015 年的 69.3%)。最接近的竞争对手是 Subversion,普及率为 16.6%(低于 36.9%);Team Foundation 版本控制,从 2015 年的 12.2% 降为 11.3%;Mercurial 普及率为 3.7%(低于 7.9%)。事实上,Git 的优势如此之大,以至于 Stack Overflow 的数据科学家都懒得在 2019 的调查中提出这个问题。

开源人员使用什么来进行源码控制?|           2018         |          2015          |
| ---------------------- | ---------------------- |
| Git: 88.4%             | Git: 69.3%             |
| Subversion: 16.6%      | Subversion: 36.9%      |
| Team Foundation: 11.3% | Team Foundation: 12.2% |
| Mercurial: 3.7%        | Mercurial: 7.9%        |
|                        | CVS: 4.2%              |
|                        | Perforce: 3.3%         || 74,298 受访者       | 16,694 受访者       |数据来源:Stack Overflow 2018/2015 开发者调查报告

1.2 发展

Git 的发展历程可以追溯到 2005 年,其诞生与当时的一个开源项目——Linux 内核的版本控制问题密切相关。

1. 背景:Linux 内核的版本控制问题

在 Git 诞生之前,Linux 内核项目使用的是一个叫做 BitKeeper 的分布式版本控制系统。BitKeeper 是一种商业软件,免费提供给开源项目使用,但随着时间的推移,BitKeeper 与开源社区的关系变得紧张。2005 年,BitKeeper 的公司决定撤回对开源社区的免费使用授权,这让 Linux 内核的开发者面临了没有合适工具的困境。

大家都知道,Linux 内核是开源的,参与者众多,到目前为止,共有两万多名开发者给 Linux Kernel 提交过代码。

但在 1991 年到 2002 年期间,Linus Torvalds(Linux 内核的创始人)作为项目的管理员并没有借助任何配置管理工具,而是以手工方式通过 patch 来合并大家提交的代码。

倒不是说 Linus 喜欢手工处理,而是因为他对代码版本管理工具非常挑剔,无论是商用的 clearcase,还是开源的 CVS、SVN 都入不了他的法眼。

直到 2002 年,Linus 才相中了一款分布式版本控制系统 BitKeeper,虽然是商用的,但 BitKeeper 愿意让 Linux 社区免费使用,这让 Linus 非常开心和满意。

时间来到 2005 年,由于 BitKeeper 提供的默认接口不能满足 Linux 社区用户的全部需要,一位开发者在未经允许的情况下反编译了 BitKeeper 并利用了未公开的接口,于是 BitKeeper 的著作权拥有者Larry McVoy(拉里·麦沃伊)就气愤地收回了 Linux 社区免费使用的权力。

2. Git 的诞生 (2005 年)

为了应对这个问题,Linus Torvalds(Linux 内核的创始人)决定开发一个新的版本控制系统。

60c7638b9c4b9507d6c43d0f540b9947

​ Linus Torvalds

Torvalds 的目标是:

  • 高效地管理大型项目(如 Linux 内核)。
  • 提供分布式架构,支持多个开发者的协作。
  • 确保性能优越,能够快速处理大量的数据。
  • 强调代码历史的完整性,避免丢失历史数据。

结果,令人意想不到的是,Linus 只用了一个星期就用 C语言完成了第一个版本,嗯。。神就是神。并且给这个版本起了一个略带嘲讽意味的名字——Git(在英式英语俚语中表示“不愉快的人”)。

Torvalds 将它命为 Git 的原因有很多种说法,但实际上他只是喜欢这个词,这是他从披头士的歌曲《I’m So Tired》(第二节)中获得灵感。

源代码的自述文件有进一步的阐述:

The name “git” was given by Linus Torvalds when he wrote the very first version. He described the tool as “the stupid content tracker” and the name as (depending on your way)

如果选历史上最伟大的一次 Git 代码提交,那一定是这 Git 工具项目本身的第一次代码提交。这次代码提交无疑是开创性的,如果说 Linux 项目促成了开源软件的成功并改写了软件行业的格局,那么 Git 则是改变了全世界开发者的工作方式和写作方式

那么,Torvalds 对 Git 的巨大成功感到惊讶吗? “如果我说我能看到它即将成功,那绝对是在撒谎。我当然没有。但是 Git 确实把所有的基础都做对了。有什么事情可以做得更好吗?当然。但总的来说,Git 确实解决了一些与 VCS 有关的真正困难的问题。” 他说。

2005年4月7日,Linus Torvalds 宣布了 Git 的首次发布。Git 是一个分布式版本控制系统,其设计和实现从一开始就以高效性和灵活性为目标。

3. 初期的发展:从 Linux 内核到广泛采用

  • 2005 年:Git 发布后,首先应用于 Linux 内核的开发。Linux 内核开发者和其他开源项目很快就开始采用 Git。
  • 2005-2006 年:Git 在开源社区中逐渐获得了认可,成为管理大型项目的理想工具。与此同时,Git 的功能逐渐完善。

4. GitHub 的诞生 (2008 年)

GitHub 的出现极大推动了 Git 的普及。GitHub 是一个基于 Git 的托管平台,提供了一个易于使用的 Web 界面和协作功能,简化了 Git 的使用,并为开源项目提供了一个集中的托管和版本管理服务。2008 年,GitHub 成立,并迅速成为 Git 用户和开源项目的主要平台。

  • GitHub 引入了 Pull Requests(拉取请求)等社交编码功能,允许开发者轻松地提出代码修改建议并进行讨论。这一功能使 Git 在团队协作和开源项目中更具吸引力。

5. Git 的广泛普及

随着 GitHub 和其他平台(如 GitLab、Bitbucket)的兴起,Git 被越来越多的开发者和团队采用,成为开源项目和企业内部项目的标准版本控制工具。Git 支持分布式开发的特点,使得它特别适合现代软件开发中的分支管理、协作开发和持续集成等工作流。

6. Git 生态系统的发展

随着 Git 的普及,围绕 Git 形成了丰富的工具和生态系统:

  • GitLab:另一个流行的 Git 托管平台,支持 Git 的同时提供 CI/CD(持续集成/持续交付)功能。
  • Bitbucket:最初以支持 Mercurial 版本控制为主,后来转向了 Git,并成为 Atlassian 系列产品的一部分。
  • GitKraken:为 Git 提供了图形化界面,便于开发者操作和管理。

此外,许多 IDE 和文本编辑器(如 Visual Studio Code、JetBrains 的 IntelliJ IDEA 等)也集成了 Git 支持,进一步促进了其普及。

7. Git 的重要特性和发展

Git 逐步增加了许多新功能和优化,以下是一些重要特性:

  • Git LFS(Large File Storage) :支持大文件的版本控制。
  • Git Submodules:支持将一个 Git 仓库嵌套到另一个 Git 仓库中,适用于多仓库管理。
  • Git Flow:一种流行的 Git 工作流,特别适用于团队开发和发布管理。
  • 性能优化:Git 不断优化其在大规模项目中的性能,增强了处理速度和效率。

8. Git 的未来

Git 已经成为全球最广泛使用的版本控制工具,未来它可能继续增强与现代开发工具和工作流的集成,如 DevOps、持续集成/持续交付(CI/CD)等,同时可能引入更多的可视化和易用性功能。

1.3 功能特点

  1. 分布式:每个开发者都有整个代码仓库的完整拷贝,包括所有的版本历史。这意味着即使没有网络连接,开发者也可以查看项目的完整历史记录,并进行提交等操作。
  2. 快照存储:大多数版本控制系统存储的是文件的变化或差异,而 Git 存储的是文件在每次提交时的状态快照。这使得 Git 在处理大文件和复杂项目时更加高效。
  3. 分支管理:Git 的分支功能非常强大且灵活,可以轻松创建、合并和删除分支。这对于尝试新想法、修复bug或是开发新特性非常有用。
  4. 数据完整性:Git 使用 SHA-1 散列算法对文件内容和目录结构进行校验和计算,确保了文件的历史记录不被篡改。
  5. 性能:由于 Git 是分布式的设计,很多操作都是本地执行,因此速度非常快。
  6. 强大的社区和支持:作为一个开源项目,Git 拥有庞大的用户群和活跃的社区,提供了大量的文档、教程和工具支持。
  7. 跨平台:Git 可以运行在多种操作系统上,包括 Windows、Linux 和 macOS。

二、下载安装

2.1 官网下载

https://git-scm.com/downloads

image

下载得到安装包

image-20241129010040044

2.2 安装

双击安装包,一直点下一步就行

image

image

image

image

安装完成后在任意目录点击鼠标右键,如果能看到如下菜单则表示安装完成:

image

2.3 验证

在 Git Bash 中输入以下命令:

git --version
  • 如果 Git 已正确安装,您将看到类似如下的输出:

    git version 2.x.x
    

    其中 2.x.x​ 是 Git 的版本号,具体版本号会根据您安装的版本而不同。

  • 如果 Git 未安装或出现错误,您将看到类似如下的错误信息:

    bash: git: command not found
    

    或者:

    'git' is not recognized as an internal or external command
    

image

2.4 Git交互方式

Git 提供了多种交互方式,其中最常用的有 Git GUIGit Bash。这两者各有特点,适合不同的用户需求和使用场景。在安装 Git 时,上述两种方式通常会与 Git 一起自动安装。

1. Git GUI(图形用户界面)

Git GUI 是一个图形化的 Git 客户端界面,适合那些不习惯命令行操作或希望使用更直观界面进行 Git 操作的用户。

特点:

  • 图形化操作:用户可以通过图形界面执行大多数 Git 操作(如提交、分支管理、查看日志等),不需要输入命令。
  • 简单易用:适合初学者和不熟悉命令行的用户,提供了直观的界面来处理版本控制。
  • 功能丰富:虽然是图形界面,但几乎支持 Git 命令行中所有的基本功能,用户可以通过点击按钮或菜单完成操作,如提交、推送、拉取、合并等。
  • 适合小团队和个人使用:Git GUI 更适合需要快速操作的用户,适合不进行复杂命令行操作的小团队或个人项目。

主要功能:

  • 查看文件变更:可以轻松查看工作区中的文件与版本库中已提交内容的差异。
  • 提交和推送代码:可以通过简单的点击提交更改并推送到远程仓库。
  • 分支管理:可以方便地创建、切换、合并分支等。
  • 查看日志:查看提交历史和相关详细信息。

使用场景:

  • 新手用户:对于不熟悉命令行的用户,Git GUI 提供了更友好的操作界面。
  • 可视化操作:适合那些更偏向图形化界面,而非纯命令行用户。

image

2. Git Bash(命令行工具)

Git Bash 是 Git 提供的一个命令行工具,模拟 Unix shell 环境,用于执行 Git 命令。它是基于 Bash(一个常见的 Unix shell)环境的,提供了一个命令行界面,用户可以通过输入命令来与 Git 进行交互。

特点:

  • 命令行界面:用户通过输入 Git 命令来进行版本控制操作。相比图形界面,命令行方式通常更加灵活且功能强大。
  • 跨平台支持:Git Bash 可以在 Windows 上模拟 Linux 命令行环境,提供类似于 macOS 或 Linux 系统的体验。
  • 高效和强大:Git Bash 支持 Git 命令和常用的 Linux 命令,可以在命令行中执行文件操作、版本控制命令、网络操作等,效率高且适合批量操作。
  • 支持脚本和自动化:你可以编写 Bash 脚本来自动化某些 Git 操作,适用于开发中的复杂任务。

主要功能:

  • 执行 Git 命令:通过 Git Bash,你可以运行 Git 的所有命令,如 git commit​、git push​、git pull​、git merge​ 等。
  • 支持常用 Linux 命令:Git Bash 不仅支持 Git 命令,还提供了 Bash shell 的常用命令,如 ls​、cd​、rm​ 等,用于文件系统操作。
  • 跨平台一致性:Git Bash 为 Windows 提供了类似 Unix 的环境,使得 Windows 用户可以像在 Linux/macOS 上那样使用 Git。
  • 调试和脚本支持:开发人员可以编写 Bash 脚本来自动化一些常见的 Git 操作,提高效率。

安装:

Git Bash 是 Git 安装包的一部分。当你下载并安装 Git 时,Git Bash 会自动安装。安装后,你可以在开始菜单中找到“Git Bash”并打开它。

使用场景:
  • 命令行用户:Git Bash 对于熟悉命令行的开发人员来说更为高效,能够直接执行 Git 操作。
  • 跨平台开发:在 Windows 上,Git Bash 为开发者提供了一个类 Unix 环境,适合那些在跨平台开发中需要一致性体验的用户。
  • 自动化和批量操作:如果你需要批量处理或自动化 Git 操作,Git Bash 是一个更灵活的工具。

image

在本文中,简要介绍了 Git 的基本概念及其安装方法。Git 作为目前最流行的分布式版本控制系统,已广泛应用于开源项目及企业开发中。通过安装和配置 Git,您已经迈出了学习和使用版本控制的第一步。

在接下来的文章中,我们将深入探索 Git 的常用命令和工作流程,帮助您更好地理解如何使用 Git 来管理代码、协作开发和保持项目历史的清晰。

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

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

相关文章

基于Java Springboot奶茶点餐微信小程序

一、作品包含 源码数据库万字文档全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA,微信开发者工具 数据…

vulnhub靶场【哈利波特】三部曲之Fawkes

前言 这次的靶机与前面不同,这里涉及到缓冲区溢出等 这个靶机也让我知道薄弱点了,缓冲溢出这方面之前接触少,所以刚拿到这个靶机打开后,人蒙了,在网上查阅好多资料,也只是浅学一下,这里主要也是…

神经网络中常见的激活函数Sigmoid、Tanh和ReLU

激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid、T…

基于Java Springboot蛋糕订购小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

ProtonBase 教育行业解决方案

01/方案概述 当前,大数据、云计算等技术正加速教育行业的数字化转型,教学模式从线下转向线上,传统教育企业向具有互联网性质的新型教育企业转变。在此背景下,教育企业亟需探索多源数据的融合扩展,以应对复杂的业务场景…

Mybatis:CRUD数据操作之删除一行数据

Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之单条删除数据 当用户点击了该按钮,就会将改行数据删除掉。那我们就需要思考,这种删除是根据什么进行删除呢?是通过主键id删除,因为id是…

力扣1382:将二叉搜索树便平衡

给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二…

架构01-演进中的架构

零、文章目录 架构01-演进中的架构 1、原始分布式时代:Unix设计哲学下的服务探索 (1)背景 时间:20世纪70年代末到80年代初计算机硬件:16位寻址能力、不足5MHz时钟频率的处理器、128KB左右的内存转型:从…

MySQL —— MySQL 程序

目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 (1)指定选项的方式 (2)mysql 客户端命令常用选项 (3)在命令行中使…

GoogleTest做单元测试

目录 环境准备GoogleTest 环境准备 git clone https://github.com/google/googletest.git说cmkae版本过低了,解决方法 进到googletest中 cmake CMakeLists.txt make sudo make installls /usr/local/lib存在以下文件说明安装成功 中间出了个问题就是,…

Flink四大基石之CheckPoint

1、State Vs Checkpoint State:状态,是Flink中某一个Operator在某一个时刻的状态,如maxBy/sum,注意State存的是历史数据/状态,存在内存中。 Checkpoint:快照点, 是Flink中所有有状态的Operator在某一个时刻的State快照信息/存档信息。 一句话概括: Checkpoint就是State的快照…

基于TensorFlow的手写体数字识别训练与测试

需求: 选择一个最简单的细分方向,初步了解AI图像识别的训练、测试过程TensorFlow、PyTorch、c,三种代码方案,先从TensorFlow入手探讨最基本问题的优化问题 总结: 基于TensorFlow的python代码库自带了mnist 训练数据…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第11篇:YOLO变体——YOLO+Transformers、DAMO、PP、NAS】

YOLO变体 1 DAMO-YOLO2 PP-YOLO, PP-YOLOv2, and PP-YOLOE2.1 PP-YOLO数据增强和预处理2.2 PP-YOLOv22.3 PP-YOLOE 3 YOLO-NAS4 YOLO Transformers5 YOLOv1-v8及变体网络结构总结 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标…

SE16N 外键校验报错问题

问题: SE16N维护时,偶尔有一些莫名奇妙的校验报错,条目XX在表XX中不存在,但是实际数据时存在的。 分析: DEBUG过程中,定位到数据校验部分,发现当外键定义的关联字段中存在某些不在对应维护表中…

【数据结构】二叉搜索树(二叉排序树)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、什么是二叉搜索树 二、二叉搜索树的实现 节点 属性和接口的声明 插入 查找 删除 拷贝构造 析构 中序遍历 三、二叉搜索树的…

【接口自动化测试】一文从3000字从0到1详解接口测试用例设计

接口自动化测试是软件测试中的一种重要手段,它能有效提高测试效率和测试覆盖率。在进行接口自动化测试之前,首先需要进行接口测试用例的设计。本文将从0到1详细且规范的介绍接口测试用例设计的过程,帮助读者快速掌握这一技能。 一、了解接口…

使用 PDF API 合并 PDF 文件

内容来源: 如何在 Mac 上合并 PDF 文件 1. 注册与认证 您可以注册一个免费的 ComPDFKit API 帐户,该帐户允许您在 30 天内免费无限制地处理 1,000 多个文档。 ComPDFKit API 使用 JSON Web Tokens 方法进行安全身份验证。从控制面板获取您的公钥和密钥&…

微服务即时通讯系统的实现(服务端)----(2)

目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…

Scala—列表(可变ListBuffer、不可变List)用法详解

Scala集合概述-链接 大家可以点击上方链接,先对Scala的集合有一个整体的概念🤣🤣🤣 在 Scala 中,列表(List)分为不可变列表(List)和可变列表(ListBuffer&…