📑 知识精讲
本次课程讲解了版本控制系统的基础概念,介绍了Git的诞生背景、架构、工作流、常用命令、分支管理和冲突解决,最后通过完整实验演示了Git协作流程,并引入了CI/CD的基础概念。
版本控制基础概念
-
版本控制系统核心作用:管理文件变更,支持多人分布式协作,可追溯任意时间点的文件版本,方便回滚错误修改。
- 🚩重点:非工程场景(如文档协作)也可使用版本控制,SharePoint、Google Drive等自带基础版本功能,代码协作需要专业VCS。
-
常见VCS发展历程:
-
Concurrent Versions System (CVS):1980年代设计,先来先服务锁机制,同一文件同时只能一人修改。
-
Apache Subversion (SVN):原子提交优化,要么全应用修改要么不应用,避免部分修改问题,但大仓库运行速度慢。
-
Mercurial:Python编写,为竞争Git诞生,使用较少。
-
Git:目前最流行的分布式版本控制系统,被绝大多数现代企业和开源项目使用。
-
-
Git诞生背景:2005年Linus Torvalds为解决Linux内核开发的协作复杂度开发,此前团队使用闭源的BitKeeper,因闭源授权问题无法满足开源社区需求,Linus仅用10天就写出了Git第一个版本。
-
Git和GitHub的区别:
- 🚩重点:Git是版本控制应用程序,GitHub/GitLab是在线远程仓库托管服务,二者不是同一概念,不要混淆。
Git架构与工作流
-
Git四大核心组件(根据课堂图片):
-
**Remote Repository(远程仓库)**:项目原始文件存储位置,所有本地副本都从这里拉取,可部署在私有服务器或GitHub/GitLab等公有云。
-
**Local Repository(本地仓库)**:存储在用户本地机器,保存所有提交(版本快照),用户无需每次都请求远程仓库,可离线工作。
-
**Staging Area(暂存区/Index)**:待提交修改的缓存区,相当于"装载码头",开发者可以自主选择需要提交的修改,不需要一次性提交所有改动。
-
**Working Directory(工作区/Workspace)**:Git监控的本地工作文件夹,Git会自动跟踪文件新增、修改、删除操作。
-
-
完整Git工作流(根据课堂图片):
Working Directory →(git add)→ Staging Area →(git commit)→ Local Repository →(git push)→ Remote Repository Remote Repository →(git fetch/pull/clone)→ Local Repository- 补充说明:流程图可参考课程架构图:从工作区add到暂存区,commit到本地仓库,push到远程仓库;远程通过fetch/pull更新本地仓库,clone初始化本地副本。
-
Git分布式架构优势:每个开发者本地都有完整的项目副本和全部提交历史,即使远程仓库出问题,本地任意副本都可以恢复,协作时不会因为锁机制阻塞他人工作。
Git核心命令(根据课堂图片)
| Git命令 | 功能描述 |
|---|---|
git init |
初始化一个目录为Git项目,会自动生成.git子目录保存版本和元数据 |
git add <file/dir> |
开始跟踪指定文件/目录,并将其添加到暂存区 |
git status |
查看项目当前状态:显示待暂存、待提交的文件,显示当前所在分支,显示未跟踪文件 |
git commit -m <message> |
将暂存区的修改生成一个本地版本快照,-m参数添加提交说明,记录修改内容 |
git push <params> |
将本地提交推送到远程仓库 |
git pull <params> |
将远程仓库的修改拉取合并到本地仓库,等同于git fetch + git merge |
git clone <params> |
将远程项目完整拷贝到本地机器 |
git diff <params> |
和Linux的diff命令功能类似,显示提交、工作树之间的文件差异 |
-
Git配置初始化:第一次使用Git需要配置用户名和邮箱,用于标识提交者:
# 全局配置,对所有项目生效 git config --global user.name "Your Name" git config --global user.email "your.email@example.com" # 查看所有已配置项 git config --list -
工作流示例:
-
创建本地仓库:执行
git init生成.git目录 -
修改/新增文件后,执行
git status查看状态,确认未跟踪/修改的文件 -
执行
git add将需要提交的文件加入暂存区,可以分多次添加不同文件 -
执行
git commit -m "修改说明"完成本地提交
-
Git分支管理
-
分支核心概念:分支允许开发者从主代码线分出独立开发线,并行开发不同功能,互不干扰,开发完成后再合并回主线,类似超级英雄的平行宇宙概念。
-
分支工作流示例 (根据课堂图片):主分支为
Master,从Master分支出Feature-1和Feature-2两个功能分支,两个功能分支独立开发、独立提交修改,开发完成后合并回Master分支,最终在Master主线整合所有功能。 -
Git HEAD概念:HEAD类似磁带机的磁头、黑胶唱片机的唱头,代表当前你正在查看的版本位置,切换分支本质就是移动HEAD到不同分支指针。
-
🚩重点:
master是Git初始化默认的主分支名称,可以通过配置修改。
Git合并冲突
-
冲突产生原因:两个开发者同时修改了同一个文件的同一部分,Git无法自动判断应该保留哪一份修改,需要人工介入解决。
-
冲突解决步骤:
-
执行
git merge后,Git会提示冲突,使用git status查看冲突文件位置。 -
打开冲突文件,Git会用特殊标记分隔冲突内容:
<<<<<<< HEAD分隔当前分支修改,=======分隔待合并分支修改,>>>>>>> 分支名结束分隔。 -
手动编辑文件,删除Git特殊标记,保留正确修改。
-
编辑完成后,执行
git add添加修改后的文件,再执行git commit完成合并提交,使用git status验证冲突已解决。
-
CI/CD基础概念
-
CI/CD定义:持续集成(Continuous Integration)、持续交付(Continuous Delivery),是自动化的开发部署流程。
- 好处:让开发团队可以更频繁、更可靠地交付代码变更,开发者不需要花时间在流程和运维上,可以聚焦在业务需求、代码质量和安全。
-
CI/CD核心工具:
-
版本控制:GitHub/GitLab/Bitbucket/Team Foundation Services
-
构建服务器:Jenkins(开源可本地部署)、Travis CI(云端GitHub项目)、GitLab CI(支持本地+云端)
-
-
CI/CD工作流:开发者提交Pull Request → 自动触发构建和测试 → 测试通过后合并到主分支 → 自动部署到生产环境。
-
网络场景应用:在"网络即代码"场景中,Git可以管理网络设备配置、Ansible等自动化工具版本,保证部署配置始终符合企业规范,提升网络部署速度和可靠性。
Git实操实验 本次实验分步演示了从零开始使用Git协作开发的完整流程:
-
初始化Git配置,验证配置:
git config --global设置用户名邮箱,git config --list验证。 -
创建项目目录,通过
git clone拉取远程已有仓库到本地。 -
修改已有文件、新增文件,通过
git status查看变更,git diff查看具体修改内容。 -
通过
git add将变更添加到暂存区,支持git add --all添加所有变更。 -
git commit -m "提交说明"完成本地提交,git log -1查看最新提交记录。 -
git push origin master将本地提交推送到远程仓库。 -
通过
git checkout -b 分支名创建新分支并切换,在新分支独立开发。 -
切换回
master分支,执行git merge 分支名合并开发完成的分支,默认快进合并。 -
合并完成后推送到远程仓库,完成整个协作流程。
💡 核心概念
-
版本控制系统(VCS):用于跟踪文件变更,支持多人协作开发,可回滚到任意历史版本的工具。
-
Git:分布式版本控制系统,是目前最流行的VCS工具。
-
远程仓库:项目的核心存储位置,所有开发者的本地仓库都从这里同步。
-
暂存区:Git中用于暂存待提交修改的缓存区域,支持开发者选择需要提交的修改。
-
分支:从主代码线分出的独立开发线,支持并行开发,互不干扰,开发完成后可合并回主线。
-
合并冲突:多个开发者修改同一文件的同一位置,Git无法自动合并,需要人工解决的情况。
-
CI/CD:持续集成/持续交付,自动化开发部署流程,支持频繁可靠的代码交付。
-
常用Git命令表:
命令 功能 git init初始化Git仓库 git add <file>添加文件到暂存区 git commit -m "msg"提交暂存变更到本地仓库 git push推送本地提交到远程仓库 git pull拉取远程变更合并到本地 git clone <url>克隆远程仓库到本地 git status查看工作区状态 git diff查看文件差异
✨ 课堂金句
-
"Git和GitHub不是同一个东西,很多初学者都搞混这一点。"
-
"提交早,提交常,就像你写文档随时保存一样。"
-
"分支就像超级英雄的平行宇宙,不同分支独立发展,最后再汇合拯救世界。"
-
"HEAD就像唱片机的唱头,你在哪里听歌,唱头就在哪里,Git里你在哪里看代码,HEAD就在哪里。"
-
"善用Git日志,它会告诉你问题在哪里,不用瞎猜。"
📝 待办事项
-
实验任务:完成本次Git协作实验,从配置到分支合并全流程操作一遍。
-
阅读参考 :《Pro Git》(Scott Chacon / Ben Straub),可在https://git-scm.com/book/en/v2免费阅读。
-
下次预习:下一节内容为Git进阶命令与高级协作流程。
-
复习重点:掌握Git架构、工作流、常用命令、冲突解决步骤,这些是Git的基础核心内容。
🎯 拍图总结
🔍 版本控制系统(VCS)基础
-
核心功能 :版本控制系统(VCS)的两大核心目标是管理文件变更 和支持协作,通过追踪文件历史快照实现变更回溯与多人协同开发。
-
常见工具:非工程场景工具(如SharePoint、Box、Google Drive)提供基础版本管理;工程场景主流工具包括CVS(1980s,首次解决冲突但效率低)、SVN(原子化操作但大型仓库性能差)、Git(分布式架构,现代开发首选)。
📌 Git概述
-
起源与特点 :2005年由Linus Torvalds开发,用于管理Linux内核代码,采用分布式架构,每个开发者本地保存完整仓库副本,支持离线工作与多备份。
-
核心价值:追踪代码修改、比较不同版本、管理分支冲突,适用于网络设备配置、Ansible自动化脚本等NetDevOps场景,支持CI/CD流水线快速交付网络变更。
-
与GitHub的区别 :Git是版本控制工具 ,GitHub是基于Git的代码托管平台,二者功能不同。
🏗️ Git架构与工作流
-
四大组件:
-
工作目录(Working Directory):本地修改文件的实际存放位置,Git追踪其与仓库的差异。
-
暂存区(Staging Area/Index) :临时存放待提交的变更,通过
git add命令将工作目录文件添加至此。 -
本地仓库(Local Repository) :存储提交历史快照(commits),位于
.git目录中。 -
远程仓库(Remote Repository):项目文件的中央存储位置(如GitHub/GitLab),供团队共享与同步。
-
-
基础工作流 :
工作目录修改 → git add 暂存 → git commit 提交到本地仓库 → git push 推送到远程仓库。
🌿 Git分支管理
-
核心作用 :支持并行开发,如从
Master主分支创建Feature功能分支,独立开发后通过Pull Request合并回主分支,避免直接修改主分支导致的风险。 -
协作模式:多开发者在不同分支独立工作,完成后合并,类似"超级英雄分任务执行后协同"的场景,确保代码质量与历史清晰。
⚙️ 常用Git命令
| 命令 | 描述 |
|---|---|
git init |
初始化本地Git仓库 |
git clone <url> |
从远程仓库复制项目到本地 |
git add <file/dir> |
将文件添加到暂存区 |
git commit -m "<message>" |
提交暂存区变更到本地仓库 |
git push <remote> <branch> |
将本地提交推送到远程仓库 |
git pull <remote> <branch> |
拉取并合并远程仓库变更(git fetch + git merge) |
git fetch <remote> |
获取远程仓库最新变更但不合并 |
git diff |
查看工作目录与暂存区/仓库的差异 |
git status |
检查项目状态(已跟踪/未跟踪文件、分支信息等) |
⚡ Git配置
-
基础配置:首次使用需设置用户名与邮箱,用于提交记录标识:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com" -
查看配置 :通过
git config --list命令查看当前配置信息。
实验过程在Cisco 的远程LAB上进行,由于延时过大,仅展示文本演示实例信息,实际实验略。
































