【版本控制】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。它直指三大核心痛点:
- 分布式架构:每个开发者本地拥有完整仓库,支持离线提交、查看历史,不再依赖中央服务器;
- 高效分支管理:轻量级分支让多人并行开发成为可能,解决了“多版本维护”的地狱;
- 数据强一致性:通过SHA-1哈希值确保每一次提交的完整性,防止代码篡改或丢失。
短短一个月后,Linux内核代码已全面迁移至Git管理。这不仅解了燃眉之急,更无意中催生了未来十年最主流的版本控制工具。
1.2 GitHub:为Git插上协作的翅膀
Git虽强,但它在2008年之前仍面临一个关键瓶颈:缺乏高效、易用的协作平台。开发者需自建服务器托管仓库,操作复杂,且缺少代码审查、任务管理等团队工具。更关键的是,开源项目难以被广泛发现和参与。
2008年4月,Tom Preston-Werner等人推出GitHub,目标很明确:让Git的分布式能力“云化”并社交化。它重点解决了Git本身不擅长的四大问题:
- 中心化托管与访问控制:提供云仓库托管,支持公/私有库,并引入用户权限管理,避免Git原生缺乏的安全问题;
- 协作流程革命:创新性提出 Fork & Pull Request 机制——开发者可一键分叉项目→修改→发起PR→代码审查→合并,极大降低开源贡献门槛;
- 项目管理集成:内置Issue跟踪、Wiki文档、里程碑管理,将代码与开发流程无缝绑定;
- 开发者社交生态:引入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 commit
与Merge 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 入门:开启云端协作之门
四步构建你的代码星球
-
创建仓库
-
连接本地与云端
# 复制仓库SSH/HTTPS链接 git remote add origin https://github.com/你的账号/项目名.git git push -u origin main # 首次推送建立关联
-
每日同步代码
git pull # 早:拉取云端最新代码 git push # 晚:推送本地修改
-
协作金钥匙:Pull Request
Fork他人仓库 → 2. 本地修改 → 3. 发起PR → 4. 等待审核合并
GitHub必备功能
- Issues:任务管理器(Bug追踪/需求收集)
- Wiki:项目知识库(文档沉淀)
- Actions:自动化流水线(测试/部署)
- Insights:数据分析中心(贡献者/代码活跃度)
2.3 实战演练:第一次协作全流程
假设你要给开源项目awesome-project
添加文档:
💡 Tips:首次使用建议开启Git的图形化工具
- VS Code内置Git支持
- GitHub Desktop(官方可视化工具)
- GitKraken(专业级跨平台客户端)
2.4 关键记忆卡
场景 | Git命令 | GitHub操作 |
---|---|---|
开始新项目 | git init | Create Repository |
保存进度 | git commit -m "..." | - |
上传代码 | git push | 自动同步到云端 |
获取他人代码 | git pull | Watch/Fork仓库 |
贡献开源项目 | - | Fork + Pull Request |
掌握这些基础操作,你已经能应对90%的日常开发场景!Git如同个人时间管理器,GitHub则是团队协作的中央枢纽,两者结合就像获得了"代码宇宙的通行证"。
以下是关于与 Git 工具类似的版本控制系统,以及与 GitHub 平台类似的代码托管服务的全面整理,结合技术特性和适用场景进行分类说明:
3 同类产品
3.1 与 Git 类似的版本控制工具
此类工具主要用于代码的版本管理、分支控制、多人协作,分为 分布式 和 集中式 两类:
- 分布式版本控制系统(类似 Git 的架构)
- Mercurial (Hg):语法简洁,学习曲线平缓,适合初学者;处理大型代码库性能优异(如 Mozilla 和 Python 项目使用)。
- Bazaar:强调灵活性与易用性,支持多种协作模型,适合小型团队或个人项目。
- Darcs:基于“补丁理论”的独特算法,简化分支合并操作,适合追求简洁工作流的团队。
- 集中式版本控制系统(需连接中央服务器)
- SVN (Subversion):经典集中式工具,适合需要频繁合并的场景(如企业传统项目)。
- Perforce:商业级工具,擅长管理大型二进制文件(如游戏开发),支持高并发和精细权限控制。
- TFVC (Team Foundation Version Control):微软生态专用,深度集成 Azure DevOps,适合 .NET 技术栈团队。
⚖️ 分布式 vs 集中式工具对比:
特性 | 分布式(Git/Mercurial) | 集中式(SVN/Perforce) |
---|---|---|
架构 | 本地完整仓库,支持离线操作 | 依赖中央服务器,需联网提交 |
分支/合并成本 | 轻量级,高效 | 较重,合并冲突处理复杂 |
适用场景 | 开源协作、频繁实验性开发 | 企业级流水线、大型二进制文件管理 |
3.2 与 GitHub 类似的代码托管平台(替代 GitHub)
此类平台提供 Git 仓库托管、协作工具、CI/CD 等完整 DevOps 能力,分为 公有云服务 和 自托管方案:
- 主流公有云平台
- GitLab:最接近 GitHub 的替代品,提供无限免费私有库 + 内置 CI/CD,支持私有化部署。
- Bitbucket:免费支持 5 人小团队私有库,深度集成 Jira/Confluence,适合 Atlassian 生态用户。
- Gitee(码云):国内主流平台,访问速度快,适合中文开源项目及合规性要求高的场景。
- Azure DevOps:微软全家桶成员,无缝衔接 Azure 云服务,适合企业级 CI/CD 流水线。
- 轻量自托管方案(可私有化部署)
- 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 CE、Gitea)。
- 小团队低成本协作 → Bitbucket(免费私有库)或 Gitee(国内网络优化)。
- 企业级 DevOps 流水线 → GitLab 或 Azure DevOps(深度云集成)。
- 替代 GitHub 的开源生态 → GitLab 或 SourceForge(老牌社区支持)。
腾讯内部使用的工具链覆盖了开发、测试、协作、项目管理等全流程,结合自研系统与行业主流工具,形成了高效的技术生态。以下是核心工具分类及说明:
🛠️ 版本控制与开发工具
-
UGit(自研 Git 客户端)
- 定位:专为大型项目(尤其是游戏开发)优化,解决原生 Git 在大文件管理、高频协作中的痛点。
- 核心功能:
- 大文件管理:内置 Git LFS 模板,支持 >4GB 文件无损传输及本地缓存加速。
- 工蜂锁机制:针对二进制文件(如美术资源)设计文件/目录级锁,避免并行修改冲突。
- 快速提交:无需强制更新即可提交未冲突文件,提升大型团队效率。
- 子目录检出:仅克隆所需目录,加速大型仓库访问。
- 适用场景:游戏开发、多仓库管理、非技术角色(如策划)协作。
-
工蜂
-工蜂 ≈ 腾讯版GitHub/GitLab
相关文章:

【版本控制】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 Gi…...
上位机知识篇---Flask框架实现Web服务
本文将简单介绍Web 服务与前端显示部分,它们基于Flask 框架和HTML/CSS/JavaScript实现,主要负责将实时视频流和检测结果通过网页展示,并提供交互式状态监控。以下是详细技术解析: 一、Flask Web 服务架构 1. 核心路由设计 app.…...
django paramiko 跳转登录
在使用Django框架结合Paramiko进行SSH远程操作时,通常涉及到自动化脚本的执行,比如远程服务器上的命令执行、文件传输等。如果你的需求是“跳转登录”,即在登录远程服务器后,再通过该服务器的SSH连接跳转到另一台服务器࿰…...
Prompt工程学习之思维树(TOT)
思维树 定义:思维树(Tree of Thoughts, ToT) 是一种先进的推理框架,它通过同时探索多条推理路径对思维链(Chain of Thought)** 进行了扩展。该技术将问题解决视为一个搜索过程 —— 模型生成不同的中间步骤…...

基于python大数据的水文数据分析可视化系统
博主介绍:高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在…...

人工智能学习09-变量作用域
人工智能学习概述—快手视频 人工智能学习09-变量作用域—快手视频...

DJango知识-模型类
一.项目创建 在想要将项目创键的目录下,输入cmd (进入命令提示符)在cmd中输入:Django-admin startproject 项目名称 (创建项目)cd 项目名称 (进入项目)Django-admin startapp 程序名称 (创建程序)python manage.py runserver 8080 (运行程序)将弹出的网址复制到浏览器中…...
结构性-代理模式
动态代理主要是为了处理重复创建模板代码的场景。 使用示例 public interface MyInterface {String doSomething(); }public class MyInterfaceImpl implements MyInterface{Overridepublic String doSomething() {return "接口方法dosomething";} }public class M…...

【Redis】笔记|第10节|京东HotKey实现多级缓存架构
缓存架构 京东HotKey架构 代码结构 代码详情 功能点:(如代码有错误,欢迎讨论纠正) 多级缓存,先查HotKey缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新…...
Java中Git基础操作详解(clone、commit、push、branch)
Git是Java开发者必备的版本控制工具,以下是核心操作的详细说明及示例: 一、Git基础概念 仓库(Repository):存储代码的目录,包含所有版本历史。提交(Commit)…...

基于规则的自然语言处理
基于规则的自然语言处理 规则方法形态还原(针对英语、德语、法语等)中文分词切分歧义分词方法歧义字段消歧方法分词带来的问题 词性标注命名实体分类机器翻译规则方法的问题 规则方法 以规则形式表示语言知识,强调人对语言知识的理性整理&am…...

使用MounRiver Studio Ⅱ软件写一个CH592F芯片的ADC采集程序,碰到的问题
MounRiver Studio Ⅱ 默认是不开启浮点计算的,所以有些浮点功能不能用,碰到问题是 while (1) {DelayMs (100);tmp Read_Temperature (0);sprintf (tempBuffer, "temp:%.2f\r\n", tmp); // 格式化温度值到字符串。使用%f要开启相应的…...

简约商务年终工作总结报告PPT模版分享
简约精致扁平化商务通用动画PPT模版,简约大气素雅商务PPT模版,商务PPT模版,商业计划书PPT模版,IOS风商务通用PPT模版,公司介绍企业宣传PPT模版,创业融资PPT模版,创意低多边形PPT模版,…...

深度学习学习率优化方法——pytorch中各类warm up策略
warm-up具体原理以及为什么这么做在之前的博客有介绍,这里直接介绍如何直接使用pytorch中的warm-up策略,在pytorch中对于warm-up所有支持的方法都有描述,可以直接阅读1。 深度学习中各类学习率优化方法(AdaGrad/RMSprop/Adam/Warm-UP)原理及其…...

分类数据集 - 场景分类数据集下载
数据集介绍:自然场景分类数据集,真实场景高质量图片数据;适用实际项目应用:自然场景下场景分类项目,以及作为通用场景分类数据集场景数据的补充;数据集类别:buildings、forest、glacier、mounta…...

leetcode.多数元素
169. 多数元素 - 力扣(LeetCode) import java.util.HashMap;public class LeetCode169 {public int majorityElement(int[] nums) {int count nums.length;int res count/2;Scanner scanner new Scanner(System.in);HashMap<Integer,Integer> …...

Server - 使用 Docker 配置 PyTorch 研发环境
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/148421901 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 建议使…...

2025年渗透测试面试题总结-腾讯[实习]安全研究员(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]安全研究员 1. 自我介绍 2. SQL二次注入原理 3. 二次注入修复方案 4. SQL注入绕WAFÿ…...
Vue:Form正则校验
目录 1. 只能输入正整数或正小数(保留三位小数) 1. 只能输入正整数或正小数(保留三位小数) cc: [{required: true, message: "钻杆长度不能为空", trigger: "blur" },{pattern: /^\d(\.\d{1,3})?$/, message: 只能输入正整数或正小数(保留三位小数), tri…...
如何处理React中表单的双向数据绑定?
在前端开发中,双向数据绑定(Two-way Data Binding)是指视图(View)与数据模型(Model)之间保持同步:当模型发生变化时,视图会自动更新;当视图(用户输…...
时间序列预测的机器学习方法:从基础到实战
时间序列预测是机器学习中一个重要且实用的领域,广泛应用于金融、气象、销售预测、资源规划等多个行业。本文将全面介绍时间序列预测的基本概念、常用方法,并通过Python代码示例展示如何构建和评估时间序列预测模型。 1. 时间序列预测概述 时间序列是按…...

01-VMware16虚拟机详细安装
官网地址:https://www.vmware.com/cn.html 1.1 打开下载好的 .exe 文件, 双击安装。 1.2 点击下一步 1.3 先勾选我接受许可协议中的条款,然后点击下一步 1.4 自定义安装路径,注意这里的文件路径尽量不要包含中文,完成…...

sql列中数据通过逗号分割的集合,按需求剔除部分值
前置 不会REGEXP 方法的需要在这里学习一下下 记sql字段逗号分隔,通过list查询 功能点 现有一个表格中一列存储的是标签的集合,通过逗号分割 入下: 其中tag_ids是逗号分割的标签,现在需要删除标签组中的一些标签,因…...

下一代设备健康管理解决方案:基于多源异构数据融合的智能运维架构
导语: 在工业4.0深度演进的关键节点,传统设备管理面临数据孤岛、误诊率高、运维滞后三大致命瓶颈。本文解析基于边缘智能与数字孪生的新一代解决方案架构,并实测验证中讯烛龙PHM-X系统如何通过多模态感知→智能诊断→自主决策闭环,…...
unipp---HarmonyOS 应用开发实战
HarmonyOS 应用开发实战指南 1. 开篇:为什么选择 HarmonyOS? 最近在开发鸿蒙应用时,发现很多开发者都在问:为什么要选择 HarmonyOS?这里分享一下我的看法: 生态优势 华为手机用户基数大,市场潜…...
Go 语言中switch case条件分支语句
1. 基本语法 package main import "fmt" func main() {var extname ".css"switch extname {case ".html":fmt.Println("text/html")case ".css":fmt.Println("text/css") // text/csscase ".js":fmt.…...
ai流式文字返回前端和php的处理办法
PHP后端 php端主要是用到ob_flush和flush,头改为流式。 基本代码 代码如下: <?php header(Content-Type:text/event-stream); header(Cache-Control:no-cache); header(Connection:keep-alive);function streamPostRequest($url,$data){$chcurl_…...

深入理解JavaScript设计模式之闭包与高阶函数
目录 前言小序一场失败面试面试后的觉醒 闭包变量作用域:谁的地盘听谁的变量的生命周期:该走了,不该走的还在闭包的更多作用:不只是谈恋爱,还能干活!1、封装私有变量:你的变量我来守护2、延长变…...
【Unity】R3 CSharp 响应式编程 - 使用篇(二)
一、通用的事件监听用法 using System;using R3;using UnityEngine;namespace Aladdin.Standard.Observable.Common{public class CommonObservable : MonoBehaviour{// 默认会调用1次public SerializableReactiveProperty<int> serializableReactiveProperty;…...

springboot启动mapper找不到方法对应的xml
数据源配置 目录结构 idea中mapper.java 可以找到对应的mapper.xml文件 启动却找不到 因为mapper.db1会被识别为文件名 而非目录结构 调整为这种...