【版本控制】Git 和 GitHub 入门教程

目录

  • 0 引言
  • 1 Git与GitHub的诞生
    • 1.1 Git:Linus的“两周奇迹”,拯救Linux内核
    • 1.2 GitHub:为Git插上协作的翅膀
    • 1.3 协同进化:从工具到生态的质变
    • 1.4 关键历程时间轴(2005–2008)
  • 2 Git与GitHub入门指南
    • 2.1 Git 入门:掌握代码的"时间机器"
    • 2.2 GitHub 入门:开启云端协作之门
    • 2.3 实战演练:第一次协作全流程
    • 2.4 关键记忆卡
  • 3 同类产品
    • 3.1 与 Git 类似的版本控制工具
    • 3.2 与 GitHub 类似的代码托管平台(替代 GitHub)
    • 3.3 选择建议
      • 🛠️ **版本控制与开发工具**

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:C++专栏
  • 💥 标题:【版本控制】Git 和 GitHub 入门教程
  • ❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正

0 引言

参考文章:廖雪峰 Git 教程

1 Git与GitHub的诞生

在如今的软件开发领域,Git与GitHub几乎已成为程序员呼吸的空气般自然的存在。但回溯它们的起源,你会发现这两者的诞生并非偶然,而是分别为了解决开发协作中两个关键层面的痛点。让我们回到历史现场,看看它们如何从零起步,重塑了代码世界的协作规则。

1.1 Git:Linus的“两周奇迹”,拯救Linux内核

2005年,Linux内核开发社区陷入一场突如其来的危机——他们原本依赖的商业版本控制系统BitKeeper,因版权争议被开发商BitMover收回了免费使用权。当时Linux内核已极其庞大,靠手工合并来自全球开发者的代码补丁,效率低下到几乎无法推进。而传统集中式工具如SVN、CVS,又因速度慢、必须联网、不符合开源精神被Linus Torvalds强烈排斥。

被逼到墙角后,Linus做了一个震惊世界的决定:他自己写一个!
他用两周时间,用C语言开发出了一套全新的分布式版本控制系统(DVCS)——这就是Git。它直指三大核心痛点:

  1. 分布式架构:每个开发者本地拥有完整仓库,支持离线提交、查看历史,不再依赖中央服务器;
  2. 高效分支管理:轻量级分支让多人并行开发成为可能,解决了“多版本维护”的地狱;
  3. 数据强一致性:通过SHA-1哈希值确保每一次提交的完整性,防止代码篡改或丢失。

短短一个月后,Linux内核代码已全面迁移至Git管理。这不仅解了燃眉之急,更无意中催生了未来十年最主流的版本控制工具。


1.2 GitHub:为Git插上协作的翅膀

Git虽强,但它在2008年之前仍面临一个关键瓶颈:缺乏高效、易用的协作平台。开发者需自建服务器托管仓库,操作复杂,且缺少代码审查、任务管理等团队工具。更关键的是,开源项目难以被广泛发现和参与。

2008年4月,Tom Preston-Werner等人推出GitHub,目标很明确:让Git的分布式能力“云化”并社交化。它重点解决了Git本身不擅长的四大问题:

  1. 中心化托管与访问控制:提供云仓库托管,支持公/私有库,并引入用户权限管理,避免Git原生缺乏的安全问题;
  2. 协作流程革命:创新性提出 Fork & Pull Request 机制——开发者可一键分叉项目→修改→发起PR→代码审查→合并,极大降低开源贡献门槛;
  3. 项目管理集成:内置Issue跟踪、Wiki文档、里程碑管理,将代码与开发流程无缝绑定;
  4. 开发者社交生态:引入Star、Follower、Trending榜单等机制,打造“代码社交网络”,让优秀项目不再埋没。

GitHub迅速吸引超过4000万开发者,托管了包括Python、jQuery等几乎所有主流开源项目,成为事实上的“开源宇宙中心”。


1.3 协同进化:从工具到生态的质变

Git与GitHub的关系,本质是引擎与平台的共生:

  • Git是本地版本控制的基石,专注高效、可靠、离线可用的代码管理;
  • GitHub则是云端协作的枢纽,将Git的能力扩展为全球化、社交化、自动化的开发流。

这种组合彻底改变了软件开发:

💡 举个例子:一个学生Fork了某AI框架(GitHub),在本地修Bug并提交(Git),再发起PR被官方合并(GitHub协作流)——整个过程无需服务器配置,却实现了全球协作。


1.4 关键历程时间轴(2005–2008)

2005年7月 │ Linus怒写Git,拯救Linux内核于BitKeeper断供危机   
2008年4月 │ GitHub上线,首创Fork+PR模型,代码社交时代开启   
2018年6月 │ 微软75亿美元收购GitHub,加速整合DevOps与AI生态   

这场始于“自救”的技术革命,最终将代码协作从封闭的小作坊,推向了开放、互联、自动化的大生产时代。而今天你我指尖每一次git commitMerge PR的动作,仍在延续这场始于2005年的进化之路 🚀。

2 Git与GitHub入门指南

掌握Git与GitHub就像获得程序员的"时空操纵术"——既能自由穿梭代码历史,又能实现全球协作。下面用最直观的方式带你上手这两个改变开发工作流的革命性工具。


2.1 Git 入门:掌握代码的"时间机器"

核心概念三分钟速懂

术语作用类比解释
仓库(Repository)存储代码历史记录的空间项目的"时光档案馆"
提交(Commit)保存代码快照的操作给当前代码拍一张"历史照片"
分支(Branch)独立开发线平行宇宙中的实验空间
暂存区(Staging)准备提交的临时区域快递打包区(选中的才发货)

新手必会五连招

# 1. 创建新仓库(初始化时光机)
git init# 2. 添加文件到暂存区(选择要存档的文件)
git add index.html  # 添加单个文件
git add .           # 添加所有修改# 3. 提交快照(拍下历史照片)
git commit -m "创建登录页面"# 4. 创建安全实验空间(开创新分支)
git checkout -b feature-login# 5. 合并分支(将实验成果并入主宇宙)
git checkout main
git merge feature-login

避坑指南

  • git status:随时查看当前状态(避免迷路)
  • git log --oneline:查看简洁历史记录(时光机导航)
  • git reset --hard HEAD~1:回退到上一个提交(时光倒流)

2.2 GitHub 入门:开启云端协作之门

四步构建你的代码星球

  1. 创建仓库

    在这里插入图片描述

在这里插入图片描述

  1. 连接本地与云端
    在这里插入图片描述

    # 复制仓库SSH/HTTPS链接
    git remote add origin https://github.com/你的账号/项目名.git
    git push -u origin main  # 首次推送建立关联
    
  2. 每日同步代码

    git pull   # 早:拉取云端最新代码
    git push   # 晚:推送本地修改
    
  3. 协作金钥匙:Pull Request
    Fork他人仓库 → 2. 本地修改 → 3. 发起PR → 4. 等待审核合并

GitHub必备功能

  • Issues:任务管理器(Bug追踪/需求收集)
  • Wiki:项目知识库(文档沉淀)
  • Actions:自动化流水线(测试/部署)
  • Insights:数据分析中心(贡献者/代码活跃度)

2.3 实战演练:第一次协作全流程

假设你要给开源项目awesome-project添加文档:

You GitHub Local VSCode Git ProjectOwner PR 1. Fork awesome-project 2. git clone 你的Fork仓库 3. 编辑docs.md文件 4. git add & commit & push 5. 点击New Pull Request 6. 代码审查+评论 7. 根据反馈修改 8. Merge合并! You GitHub Local VSCode Git ProjectOwner PR

💡 Tips:首次使用建议开启Git的图形化工具

  • VS Code内置Git支持
  • GitHub Desktop(官方可视化工具)
  • GitKraken(专业级跨平台客户端)

2.4 关键记忆卡

场景Git命令GitHub操作
开始新项目git initCreate Repository
保存进度git commit -m "..."-
上传代码git push自动同步到云端
获取他人代码git pullWatch/Fork仓库
贡献开源项目-Fork + Pull Request

掌握这些基础操作,你已经能应对90%的日常开发场景!Git如同个人时间管理器,GitHub则是团队协作的中央枢纽,两者结合就像获得了"代码宇宙的通行证"。

以下是关于与 Git 工具类似的版本控制系统,以及与 GitHub 平台类似的代码托管服务的全面整理,结合技术特性和适用场景进行分类说明:


3 同类产品

3.1 与 Git 类似的版本控制工具

此类工具主要用于代码的版本管理、分支控制、多人协作,分为 分布式集中式 两类:

  1. 分布式版本控制系统(类似 Git 的架构)
  • Mercurial (Hg):语法简洁,学习曲线平缓,适合初学者;处理大型代码库性能优异(如 Mozilla 和 Python 项目使用)。
  • Bazaar:强调灵活性与易用性,支持多种协作模型,适合小型团队或个人项目。
  • Darcs:基于“补丁理论”的独特算法,简化分支合并操作,适合追求简洁工作流的团队。
  1. 集中式版本控制系统(需连接中央服务器)
  • SVN (Subversion):经典集中式工具,适合需要频繁合并的场景(如企业传统项目)。
  • Perforce:商业级工具,擅长管理大型二进制文件(如游戏开发),支持高并发和精细权限控制。
  • TFVC (Team Foundation Version Control):微软生态专用,深度集成 Azure DevOps,适合 .NET 技术栈团队。

⚖️ 分布式 vs 集中式工具对比:

特性分布式(Git/Mercurial)集中式(SVN/Perforce)
架构本地完整仓库,支持离线操作依赖中央服务器,需联网提交
分支/合并成本轻量级,高效较重,合并冲突处理复杂
适用场景开源协作、频繁实验性开发企业级流水线、大型二进制文件管理

3.2 与 GitHub 类似的代码托管平台(替代 GitHub)

此类平台提供 Git 仓库托管、协作工具、CI/CD 等完整 DevOps 能力,分为 公有云服务自托管方案

  1. 主流公有云平台
  • GitLab:最接近 GitHub 的替代品,提供无限免费私有库 + 内置 CI/CD,支持私有化部署。
  • Bitbucket:免费支持 5 人小团队私有库,深度集成 Jira/Confluence,适合 Atlassian 生态用户。
  • Gitee(码云):国内主流平台,访问速度快,适合中文开源项目及合规性要求高的场景。
  • Azure DevOps:微软全家桶成员,无缝衔接 Azure 云服务,适合企业级 CI/CD 流水线。
  1. 轻量自托管方案(可私有化部署)
  • Gitea / Gogs:Go 语言开发,资源占用低,部署简单,适合个人或小团队私有环境。
  • GitBucket:Scala 实现的开源 GitHub 克隆,功能齐全,适合需要高度定制化的团队。
  • Phabricator:集成代码审查、任务跟踪、Wiki,适合中大型团队协作。

🌐 国内开发者常用平台:

平台核心优势适用场景
Gitee政策合规、中文社区活跃国内开源项目、企业级托管
CODING腾讯生态集成、Web IDE 支持教育机构、初创团队
Codeup(阿里云)免费容量大、阿里云无缝集成云原生项目、DevOps 自动化

📊 平台特性对比表:

平台私有部署免费私有库CI/CD 内置特色功能
GitLab完整 DevOps 流水线
Bitbucket✅(≤5人)Jira/Confluence 深度集成
Gitea⚠️(需插件)轻量级、低资源消耗
SourceForge老牌开源社区、多协议支持

3.3 选择建议

  • 需要完全控制代码与数据 → 自托管方案(GitLab CEGitea)。
  • 小团队低成本协作Bitbucket(免费私有库)或 Gitee(国内网络优化)。
  • 企业级 DevOps 流水线GitLabAzure DevOps(深度云集成)。
  • 替代 GitHub 的开源生态GitLabSourceForge(老牌社区支持)。

腾讯内部使用的工具链覆盖了开发、测试、协作、项目管理等全流程,结合自研系统与行业主流工具,形成了高效的技术生态。以下是核心工具分类及说明:


🛠️ 版本控制与开发工具

  1. UGit(自研 Git 客户端)

    • 定位:专为大型项目(尤其是游戏开发)优化,解决原生 Git 在大文件管理、高频协作中的痛点。
    • 核心功能
      • 大文件管理:内置 Git LFS 模板,支持 >4GB 文件无损传输及本地缓存加速。
      • 工蜂锁机制:针对二进制文件(如美术资源)设计文件/目录级锁,避免并行修改冲突。
      • 快速提交:无需强制更新即可提交未冲突文件,提升大型团队效率。
      • 子目录检出:仅克隆所需目录,加速大型仓库访问。
    • 适用场景:游戏开发、多仓库管理、非技术角色(如策划)协作。
  2. 工蜂
    -工蜂 ≈ 腾讯版GitHub/GitLab

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

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

相关文章

Dify源码教程:账户和密码传递分析

概述 Dify系统中账户创建过程中的密码处理是Web应用安全的重要环节。本教程详细分析了从前端表单到后端存储的完整流程,展示了Dify如何安全地处理用户凭据。 前端部分 在 dify/web/app/install/installForm.tsx 文件中,当用户填写完表单并点击安装按钮…

window查看SVN账号密码

背景 公司的SVN地址发生迁移,想迁移一下本地SVN地址,后来发现SVN账号密码忘记了。写此文章纯记录。 迁移SVN地址: 找到svn目录点击relocate,输入新的svn地址,如需输入账号密码,输入账号密码即完成svn地址…

Read View在MVCC里如何工作

Read View的结构 Read View中有四个重要的字段: m_ids:创建 Read View 时,数据库中启动但未提交的「活跃事务」的事务 id 列表 。min_trx_id:创建 Read View 时,「活跃事务」中事务 id 最小的值,即 m_ids …

如何在mac上安装podman

安装 Podman 在 macOS 上 在 macOS 上安装 Podman 需要使用 Podman 的桌面客户端工具 Podman Desktop 或通过 Homebrew 安装命令行工具。 使用 Homebrew 安装 Podman: (base) ninjamacninjamacdeMacBook-Air shell % brew install podman > Auto-updating Hom…

QGraphicsView中鼠标点击与移动事件传递给MainWindow

在Qt图形应用程序开发中,QGraphicsView和QGraphicsScene框架提供了强大的2D图形显示功能。然而,当我们需要在主窗口(MainWindow)中处理这些视图中的鼠标事件。 问题背景 在典型的Qt图形应用程序架构中: MainWindow └── QGraphicsView└── QGraphicsScene└── QGra…

Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)

💡 前言 在高并发、高性能的系统开发中,缓存是提升接口响应速度和降低数据库压力的重要手段。Spring Boot 提供了强大的缓存抽象层 —— spring-context-support,并结合 JSR-107 标准,提供了多个缓存注解,如&#xff…

vue中ref的详解以及react的ref对比

文章目录 1. ref是什么2. ref的使用3. ref的特性4. 使用场景5. 注意事项6. 与 React 的对比7. 动态 ref8. 函数式组件中的 ref9. 组合式 API 中的 ref10. 总结 1. ref是什么 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。可以通过实例对象…

通过ca证书的方式设置允许远程访问Docker服务

设置允许远程访问Docker服务 使用场景 环境 系统:anolis7.9 修改Docker服务配置,配置安全证书 生成ca证书到/etc/docker目录中,后续会要用到 #该步骤需要设置密码,后面步骤会要用到,此处设置密码为123456 openss…

Qt Quick Layout功能及架构

Qt Quick Layouts 是 Qt Quick 中用于管理用户界面布局的模块,在 Qt 6.0 中继续提供强大的布局管理功能。 一、主要功能 主要布局类型 RowLayout - 水平排列项目 ColumnLayout - 垂直排列项目 GridLayout - 网格排列项目 StackLayout - 堆叠项目(一…

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…

从 ClickHouse、Druid、Kylin 到 Doris:网易云音乐 PB 级实时分析平台降本增效

网易云音乐基于 Apache Doris 替换了早期架构中 Kylin、Druid、Clickhouse、Elasticsearch、HBase 等引擎,统一了实时分析架构,并广泛应用于广告实时数仓、日志平台和会员报表分析等典型场景中,带来导入性能提升 3~30 倍&#xff…

Android 本地存储路径说明

一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,SD卡根目录会…

开发的几种格式,TCP的十个重要机制

自定义协议中, 我们有几种常见的数据格式: 1.xml 通过标签来组织数据 请求: 优势: 让数据的可读性变更好了 劣势: 标签非常繁琐,传输的时候也占用更多网络带宽(maven会使用xml来管理项目配…

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…

任务调度器-关于中心化调度 vs 去中心化调度的核心区别

1. 定义与架构模型 维度中心化调度去中心化调度核心角色存在一个中央调度器(如XXL-JOB的调度中心),统一管理任务分配、状态监控和故障处理。无中心节点,调度逻辑分散在多个节点,通过共识算法(如选举机制&a…

[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景

当AI成为编程搭档:结对编程中的知识转移新图景 论文信息 论文标题:From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer(从开发者结对到AI副驾驶:知识转移的对比研究) 作者及机构&#…

CAD多面体密堆积3D插件

插件介绍 CAD多面体密堆积3D插件可在AutoCAD内建立三维随机多面体密堆积模型。 插件内置物理动力学模拟算法,通过模拟重力、碰撞等现象,使多面体在虚拟环境中发生自然堆积,进而实现真实的堆积效果。多面体堆积模拟中存在的局部穿模问题可通…

VSCode CUDA C++进行Linux远程开发

环境准备 确保在本地和远程Linux服务器上安装了以下软件: Visual Studio Code(简称VS Code)Remote Development extension pack for VS CodeCUDA Toolkit,推荐版本为11.0或更高GCC编译器,用于C代码的编译 此外&…

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…