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

news2025/1/14 7:23:01

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.coloradmin.cn/o/2251604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

私有库gitea安装

一 gitea是什么 Gitea是一款自助Git服务,简单来说,就是可以一个私有的github。 搭建很容易。 Gitea依赖于Git。 类似Gitea的还有GitHub、Gitee、GitLab等。 以下是安装步骤。 二 安装sqilite 参考: 在windows上安装sqlite 三 安装git…

[CTF/网络安全] 攻防世界 upload1 解题详析

[CTF/网络安全] 攻防世界 upload1 解题详析 考察文件上传&#xff0c;具体原理及姿势不再赘述。 姿势 在txt中写入一句话木马<?php eval($_POST[qiu]);?> 回显如下&#xff1a; 查看源代码&#xff1a; Array.prototype.contains function (obj) { var i this.…

基于HTML+CSS的房地产销售网站设计与实现

摘 要 房地产销售系统&#xff0c;在二十年来互联网时代下有着巨大的意义&#xff0c;随着互联网不断的发展扩大&#xff0c;一个方便直 观的房地产管理系统的网站开发是多么地有意义&#xff0c;不仅打破了传统的线下看房&#xff0c;线下获取资讯&#xff0c;也给房地产从业…

说说Elasticsearch拼写纠错是如何实现的?

大家好&#xff0c;我是锋哥。今天分享关于【说说Elasticsearch拼写纠错是如何实现的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说说Elasticsearch拼写纠错是如何实现的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

如何把产品3D模型放到网站上进行3D展示或3D互动?

要将产品3D模型放到网站上进行3D展示或3D互动&#xff0c;可以按照以下步骤进行&#xff1a; 一、准备3D模型 使用3D建模软件&#xff08;如3ds Max、Maya、Blender、C4D等&#xff09;制作好产品的3D模型。 确保3D模型的格式是网站或平台所支持的&#xff0c;常见的格式包括…

SpringBoot集成Flowable

一、工作流介绍 1、概念 通过计算机对业务流程的自动化管理。工作流是建立在业务流程的基础上&#xff0c;一个软件的系统核心根本上还是系统的业务流程&#xff0c;工作流只是协助进行业务流程管理。 解决的是&#xff1a;在多个参与者之间按照某种预定义的规则自动进行传递文…

1-1 Gerrit实用指南

注&#xff1a;学习gerrit需要拥有git相关知识&#xff0c;如果没有学习过git请先回顾git相关知识点 黑马程序员git教程 一小时学会git git参考博客 git 实操博客 1.0 定义 Gerrit 是一个基于 Web 的代码审查系统&#xff0c;它使用 Git 作为底层版本控制系统。Gerrit 的主要功…

鸿蒙开发:自定义一个任意位置弹出的Dialog

前言 鸿蒙开发中&#xff0c;一直有个问题困扰着自己&#xff0c;想必也困扰着大多数开发者&#xff0c;那就是&#xff0c;系统提供的dialog自定义弹窗&#xff0c;无法实现在任意位置进行弹出&#xff0c;仅限于CustomDialog和Component struct的成员变量&#xff0c;这就导致…

Matlab模块From Workspace使用数据类型说明

Matlab原文连接&#xff1a;Load Data Using the From Workspace Block 模型&#xff1a; 从信号来源的数据&#xff1a; timeseries 数据&#xff1a; sampleTime 0.01; numSteps 1001;time sampleTime*[0:(numSteps-1)]; time time;data sin(2*pi/3*time);simin time…

架构01-演进中的架构

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

社群赋能电商:小程序 AI 智能名片与 S2B2C 商城系统的整合与突破

摘要&#xff1a;本文聚焦于社群在电商领域日益凸显的关键地位&#xff0c;深入探讨在社群粉丝经济迅猛发展背景下&#xff0c;小程序 AI 智能名片与 S2B2C 商城系统如何与社群深度融合&#xff0c;助力电商突破传统运营局限&#xff0c;挖掘新增长点。通过分析社群对电商的价值…

【electron-vite】搭建electron+vue3框架基础

一、拉取项目 electron-vite 中文文档地址&#xff1a; https://cn-evite.netlify.app/guide/ 官网网址&#xff1a;https://evite.netlify.app/ 版本 vue版本&#xff1a;vue3 构建工具&#xff1a;vite 框架类型&#xff1a;Electron JS语法&#xff1a;TypeScript &…

EasyDarwin搭建直播推流服务

学习链接 easydarwin官网 - 这里看介绍 easydarwin软件下载地址 - 百度网盘 easydarwin视频 B站 文章目录 学习链接使用下载EasyDarwin压缩包&#xff0c;并解压到目录启动EasyDarwin点播直播easyplayer.jsapidocffmpeg推流rtsp & ffplay拉流 使用 下载EasyDarwin压缩包…

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】

文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…

【WRF后处理】WRF模拟效果评价及可视化:MB、RMSE、IOA、R

【WRF后处理】模拟效果评价及可视化 准备工作模型评价指标Python实现代码Python处理代码:导入站点及WRF模拟结果可视化图形及评价指标参考在气象和环境建模中(如使用 WRF 模型进行模拟),模型性能评价指标是用于定量评估模拟值与观测值之间偏差和拟合程度的重要工具。 本博客…

基于JSP+MySQL的网上招聘系统的设计与实现

摘要 在这样一个经济飞速发展的时代&#xff0c;人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说&#xff0c;他对就业市场和形势了解的不够详细&#xff0c;同时对自己的职业规划也很模糊&#xff0c;这就导致大量的 时间被花费在…

机器学习——生成对抗网络(GANs):原理、进展与应用前景分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一. 生成对抗网络的基本原理二. 使用步骤2.1 对抗性训练2.2 损失函数 三. GAN的变种和进展四. 生成对抗网络的应用五. 持续挑战与未来发展方向六. 小结 前言 生…

vue.js学习(day 14)

目录 综合案例&#xff1a;商品列表 自定义指令 main.js(全局注册) import Vue from vue import App from ./App.vueVue.config.productionTip false// //1.全局注册指令 // Vue.directive(focus,{ // //inserted 会在 指令所在的元素&#xff0c;被插入到页面中时触发 /…

C++类中多线程的编码方式

问题 在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。 但是这个方式在处理线程时会碰到一个问题。 考虑下面一个简单的场景: class demoC { public:std::thread t;int x;void threadFunc(){std::cout<<x&…

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件 Python 是一门强大的编程语言&#xff0c;它不仅可以用于数据处理、自动化脚本&#xff0c;还可以用于创建图形用户界面 (GUI) 应用程序。在本教程中&#xff0c;我们将使用 Python 的标准库模块 tkinter 创建一…