网络自动化Python课程:Git版本控制基础入门与实验演示

📑 知识精讲

本次课程讲解了版本控制系统的基础概念,介绍了Git的诞生背景、架构、工作流、常用命令、分支管理和冲突解决,最后通过完整实验演示了Git协作流程,并引入了CI/CD的基础概念。

版本控制基础概念

  • 版本控制系统核心作用:管理文件变更,支持多人分布式协作,可追溯任意时间点的文件版本,方便回滚错误修改。

    • 🚩重点:非工程场景(如文档协作)也可使用版本控制,SharePoint、Google Drive等自带基础版本功能,代码协作需要专业VCS。
  • 常见VCS发展历程

    1. Concurrent Versions System (CVS):1980年代设计,先来先服务锁机制,同一文件同时只能一人修改。

    2. Apache Subversion (SVN):原子提交优化,要么全应用修改要么不应用,避免部分修改问题,但大仓库运行速度慢。

    3. Mercurial:Python编写,为竞争Git诞生,使用较少。

    4. Git:目前最流行的分布式版本控制系统,被绝大多数现代企业和开源项目使用。

  • Git诞生背景:2005年Linus Torvalds为解决Linux内核开发的协作复杂度开发,此前团队使用闭源的BitKeeper,因闭源授权问题无法满足开源社区需求,Linus仅用10天就写出了Git第一个版本。

  • Git和GitHub的区别

    • 🚩重点:Git是版本控制应用程序,GitHub/GitLab是在线远程仓库托管服务,二者不是同一概念,不要混淆。

Git架构与工作流

  • Git四大核心组件(根据课堂图片):

    1. **Remote Repository(远程仓库)**:项目原始文件存储位置,所有本地副本都从这里拉取,可部署在私有服务器或GitHub/GitLab等公有云。

    2. **Local Repository(本地仓库)**:存储在用户本地机器,保存所有提交(版本快照),用户无需每次都请求远程仓库,可离线工作。

    3. **Staging Area(暂存区/Index)**:待提交修改的缓存区,相当于"装载码头",开发者可以自主选择需要提交的修改,不需要一次性提交所有改动。

    4. **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
  • 工作流示例

    1. 创建本地仓库:执行git init生成.git目录

    2. 修改/新增文件后,执行git status查看状态,确认未跟踪/修改的文件

    3. 执行git add将需要提交的文件加入暂存区,可以分多次添加不同文件

    4. 执行git commit -m "修改说明"完成本地提交

Git分支管理

  • 分支核心概念:分支允许开发者从主代码线分出独立开发线,并行开发不同功能,互不干扰,开发完成后再合并回主线,类似超级英雄的平行宇宙概念。

  • 分支工作流示例 (根据课堂图片):主分支为Master,从Master分支出Feature-1Feature-2两个功能分支,两个功能分支独立开发、独立提交修改,开发完成后合并回Master分支,最终在Master主线整合所有功能。

  • Git HEAD概念:HEAD类似磁带机的磁头、黑胶唱片机的唱头,代表当前你正在查看的版本位置,切换分支本质就是移动HEAD到不同分支指针。

  • 🚩重点:master是Git初始化默认的主分支名称,可以通过配置修改。

Git合并冲突

  • 冲突产生原因:两个开发者同时修改了同一个文件的同一部分,Git无法自动判断应该保留哪一份修改,需要人工介入解决。

  • 冲突解决步骤

    1. 执行git merge后,Git会提示冲突,使用git status查看冲突文件位置。

    2. 打开冲突文件,Git会用特殊标记分隔冲突内容:<<<<<<< HEAD分隔当前分支修改,=======分隔待合并分支修改,>>>>>>> 分支名结束分隔。

    3. 手动编辑文件,删除Git特殊标记,保留正确修改。

    4. 编辑完成后,执行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协作开发的完整流程:

  1. 初始化Git配置,验证配置:git config --global设置用户名邮箱,git config --list验证。

  2. 创建项目目录,通过git clone拉取远程已有仓库到本地。

  3. 修改已有文件、新增文件,通过git status查看变更,git diff查看具体修改内容。

  4. 通过git add将变更添加到暂存区,支持git add --all添加所有变更。

  5. git commit -m "提交说明"完成本地提交,git log -1查看最新提交记录。

  6. git push origin master将本地提交推送到远程仓库。

  7. 通过git checkout -b 分支名创建新分支并切换,在新分支独立开发。

  8. 切换回master分支,执行git merge 分支名合并开发完成的分支,默认快进合并。

  9. 合并完成后推送到远程仓库,完成整个协作流程。

💡 核心概念
  • 版本控制系统(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上进行,由于延时过大,仅展示文本演示实例信息,实际实验略。

相关推荐
circuitsosk1 小时前
不止于API调用:大模型推理加速与云原生服务化部署指南
python·云原生·agent·vllm·推理加速·大模型部署·ensorrt-llm
萌动的小火苗1 小时前
深度神经网络中,梯度消失和梯度爆炸的根本原因是什么?有哪些解决方法?【文末含面试万能总结】
人工智能·python·深度学习·神经网络·dnn
卷无止境1 小时前
当Python遇上并发:concurrent.futures的核心逻辑与实战技巧
后端·python
treesforest1 小时前
随意装软件也会被恶意IP入侵电脑?
网络·网络协议·tcp/ip·网络安全·ip属地·查ip归属地
酷可达拉斯2 小时前
Linux操作系统-tcpdump抓包定位网络问题实战
linux·运维·服务器·网络·tcpdump
卷无止境2 小时前
编程语言里到底有没有经济学规律?
后端·python
可爱系程序猿10 小时前
网络打印机地址正常却无法出纸:从 TCP/IP 端口到 Print Spooler 的排错步骤
网络·网络协议·tcp/ip
天才测试猿10 小时前
2026软件测试面试八股文(含答案+文档)
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
Dontla11 小时前
预置known_hosts如何防止中间人攻击(MITM)?(服务器公钥、服务器私钥)Runner、DNS污染、BGP劫持、同网络ARP欺骗、SSH握手
服务器·网络·ssh