分布式版本控制系统Git的安装和使用

分布式版本控制系统Git的安装和使用

🌈个人主页: Hygge_Code🔥热门专栏:从0开始学习Java | Linux学习| 计算机网络💫个人格言: “既然选择了远方,便不顾风雨兼程”

在这里插入图片描述

文章目录

一、关于版本控制

1. 什么是“版本控制”?

• 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统

2. 版本控制系统(VCS)带来的好处🐦‍🔥

•可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态
•可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致问题的原因
• 就算你把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子

3. 版本控制系统分类

• 本地版本控制系统(如:RCS)
• 集中化的版本控制系统(如:CVS、Subversion)
分布式版本控制系统(如:Git、Mercurial、Bazaar)

二、Git核心

1. 三大文件状态

Git通过三种状态精准管理代码变化,每一步操作都对应状态的转换:

  • 已修改(modified):文件在工作区被修改,但尚未存入本地数据库,是代码变化的“初始状态”。
  • 已暂存(staged):对已修改文件的当前版本做标记,确认这部分修改会纳入下次提交的快照,相当于给代码“拍了张待存档的照片”。
  • 已提交(committed):暂存区的快照被永久存入Git目录(本地数据库),代码进入“安全存储”状态。

这三种状态对应Git项目的三个核心区域:工作区(实际编写代码的文件夹)、暂存区(临时存放待提交修改的文件)、Git目录(存储元数据和对象数据库的核心区域)=

在这里插入图片描述

2. 四步完成一次代码提交

Git的基础操作围绕“修改-暂存-提交-同步”展开,每一步都有明确的目标:

  1. 工作区修改:在本地项目文件夹中编写或修改代码,比如新增一个user.js文件实现用户登录功能。
  2. 暂存区标记:通过git add命令将需要提交的修改加入暂存区,可精准选择单个文件(git add user.js)或所有修改(git add .),避免误提交无关内容。
  3. 本地库提交:用git commit -m "新增用户登录功能:实现账号密码验证"将暂存区内容存入本地Git目录,同时填写清晰的提交信息,方便后续追溯。
  4. 远程库同步:通过git push将本地提交推送到远程仓库(如GitHub、GitLab),或用git pull拉取远程最新代码,确保团队协作时版本一致。

三、Git实战:从环境配置到命令详解

1. 环境配置

安装Git后,首要任务是配置用户信息——这会写入每一次提交,成为你的“身份标识”,在团队协作中至关重要:

# 全局配置(所有本地仓库通用)git config --global user.name "你的姓名"git config --global user.email "你的工作邮箱"# 查看配置是否生效git config --list # 单独查看某项配置,如用户名git config user.name 

若需要为特定项目配置不同信息,只需进入项目目录,去掉--global参数重新执行命令即可。

Git的安装操作

Git的下载安装 (图文教程)

2. 本地操作命令

本地仓库是Git操作的基础,常用命令覆盖了从初始化到版本回溯的全流程:

命令功能说明示例
git init初始化本地仓库,生成隐藏的.git目录cd 项目文件夹 && git init
git status查看文件状态,区分已修改、已暂存、未跟踪文件git status
git add将文件添加到暂存区git add *.js(添加所有JS文件)
git commit提交暂存区内容到本地仓库git commit -m "修复登录页表单验证bug"
git log查看提交历史,--oneline参数可简化输出git log --oneline
git rm从版本库移除文件(同时删除本地文件)git rm obsolete.js
git mv移动或重命名文件,保留版本记录git mv oldname.js newname.js
git reset取消暂存区文件,或回溯版本git reset HEAD user.js(取消user.js暂存)
git checkout撤销工作区修改,或切换分支git checkout -- user.js(撤销user.js未暂存的修改)

3. 远程操作命令

远程仓库是团队共享代码的核心,以下命令覆盖了远程仓库的管理与同步:

代码同步

# 从远程仓库抓取代码(不合并到工作区)git fetch origin # 拉取远程代码并合并到当前分支(多人协作常用)git pull origin main # 推送本地分支到远程仓库(首次推送需加-u关联分支)git push -u origin main # 克隆远程仓库到本地(初始化新项目时用)git clone https://github.com/你的账号/项目名.git 

查看/管理远程仓库

# 查看已配置的远程仓库(-v显示详细URL)git remote -v # 添加远程仓库,命名为origin(默认名称)git remote add origin https://github.com/你的账号/项目名.git # 重命名远程仓库(如将origin改为github)git remote rename origin github # 移除远程仓库git remote remove github # 查看某个远程仓库的详细信息git remote show origin 

当拉取远程代码遇到“无关历史”冲突时,可添加--allow-unrelated-histories参数强制合并,如git pull origin main --allow-unrelated-histories

四、Git分支与标签

1. 分支:隔离开发

  • 分支协作流程
    1. 接到需求后,从主分支(main)创建功能分支(如feature/user-profile)。
    2. 在功能分支开发完成后,切换回主分支(git checkout main)。
    3. 合并功能分支到主分支(git merge feature/user-profile)。
    4. 确认无误后,删除功能分支(git branch -d feature/user-profile),若分支未合并需强制删除,用git branch -D 分支名

核心分支命令

# 创建分支(如开发新功能的feature/payment分支)git branch feature/payment # 切换分支git checkout feature/payment # 创建并切换分支(推荐用法)git checkout -b feature/payment # 查看所有分支(当前分支前带*)git branch # 查看分支最后一次提交git branch -v 

2. 标签:标记重要版本

在项目发布节点(如V1.0、V2.0),用标签标记特定提交,能快速定位发布版本,方便后续维护。Git标签分为两种:

标签同步:默认git push不推送标签,需手动推送:

# 推送单个标签到远程git push origin v1.0 # 推送所有标签到远程git push origin --tags 

附注标签:包含标签者信息、创建时间、附注描述,更适合团队共享:

git tag -a v1.0 -m "V1.0版本:完成用户注册、登录、商品列表功能"

轻量标签:仅存储提交校验和,适合本地临时标记:

git tag v1.0 # 给当前提交打轻量标签

五、版本库目录与编码规范

1. 版本库目录规范

混乱的目录结构会增加团队协作成本,统一的目录规范能提升开发效率。推荐的Git仓库根目录结构如下:

项目根目录/ ├─ documents/ # 项目相关文档(需求文档、设计文档、测试报告等) ├─ projects/ # 项目源代码(按模块划分,如前端项目放projects/frontend,后端放projects/backend) ├─ README.md # 项目说明文档(中文),包含项目介绍、目录结构、环境搭建步骤等 └─ README.en.md# 项目说明文档(英文),方便国际协作 

可参考模板仓库(https://gitee.com/zero-awei/hello-gitee.git)快速搭建目录结构,确保团队成员遵循统一标准。

在这里插入图片描述

2. 编码规范

编码规范是团队协作的“语言共识”,Git仓库需配合编码规范与检查工具,确保代码质量:

  • 常用编码规范
    • Java项目:遵循《阿里巴巴Java开发手册》,涵盖命名规范、注释要求、异常处理等细节。
    • 多语言通用:参考《Google开源项目风格指南》,适配C++、Python、JavaScript等多种语言。
  • 编码检查工具

C++:用Cpplint工具,可集成到Visual Studio等IDE,配置示例:

命令:D:\software\Python27\python.exe 参数:Tools\Scripts\cpplint.py --output=vs7 --filter=-build/include_subdir 初始目录:$(ItemDir) 

通过工具自动化检查,能减少人工 review 成本,让代码风格保持一致。

六、冲突解决

例如:

在这里插入图片描述

多人协作时,同一文件的同一部分被修改,合并分支会触发冲突。Git会在冲突文件中标记冲突区域,只需三步即可解决:

  1. 查看冲突:执行git status,会显示“both modified: 冲突文件名”,明确冲突文件。
  2. 提交结果:执行git add 冲突文件名将修改加入暂存区,再用git commit提交(无需额外写信息,Git会自动生成冲突解决日志)。

修改文件:打开冲突文件,Git用<<<<<<< HEAD(当前分支内容)、=======(待合并分支内容)、>>>>>>> 分支名标记冲突区域,按需保留代码并删除标记。例如:

# 冲突前 <<<<<<< HEAD String welcome = "欢迎登录"; ======= String welcome = "Welcome to Login"; >>>>>>> feature/i18n # 冲突后(保留国际化版本) String welcome = "Welcome to Login"; 

若冲突复杂,可使用git mergetool启用可视化冲突解决工具(如VS Code、Beyond Compare),降低操作难度。


如果我的内容对你有帮助,请 点赞 , 评论 , 收藏 。创作不易,大家的支持就是我坚持下去的动力!

在这里插入图片描述

Read more

软件解耦与扩展:插件式开发方式(基于 C++ 与 C# 的实现)

软件解耦与扩展:插件式开发方式(基于 C++ 与 C# 的实现)

软件解耦与扩展:插件式开发方式 * 🤔 什么是插件式开发? * 🧩 为何选择插件式开发?—— 解耦与扩展的艺术 * 1. 高度解耦 * 2. 极致的扩展性 * 3. 增强可维护性 * 4. 支持动态加载与卸载 * 🏗️ 插件系统的核心架构 * 💻 实践篇:C# 下的插件式开发 * 1. 定义插件契约 * 2. 实现一个具体插件 * 3. 构建宿主程序(插件加载器) * 应用案例:可扩展的日志系统 * ⚙️ 实践篇:C++ 下的插件式开发 * 1. 定义插件契约 * 2. 实现一个具体插件 * 3. 构建宿主程序(插件加载器) * 📊 C# 与 C++ 实现对比 * ⚠️ 挑战与注意事项 * 🎯 总结:何时使用插件式架构? 🚀在软件工程的漫长演进中,我们始终在追求一个核心目标:构建稳定而灵活的系统。一个优秀的软件架构,如同人体的骨骼,既要坚实稳固,又要具备生长与适应的能力。

By Ne0inhk
【C++】深入浅出“图”——最短路径算法

【C++】深入浅出“图”——最短路径算法

文章目录 * 一、Dijkstra算法 * 二、Bellman_Ford算法 * 三、Floyd_Warshall算法 一、Dijkstra算法 最短路径问题是指,从在带权的有向图中从某一顶点出发,找到通往另一顶点的最短路径,“最短”指的是沿路径各边的权值总和最小。 Dijkstra算法是单源最短路径的经典贪心算法,只能用于没有负权的图。它从起点出发,每次选当前距离最小且未确定最短路径的节点,用它去松弛(更新)所有邻接点的最短路径估计值,标记该节点为 “已确定”,重复此过程直到所有节点处理完毕,最终得到起点到图中所有节点的最短路径。 // src是选定的起点,dist记录起点到各点的最短路径,pPath记录到每个点的最短路径的前驱顶点下标voidDijkstra(const V& src, vector<W>& dist, vector<int>& pPath){ size_t srci =GetVertexIndex(

By Ne0inhk

C++ 常见面试题汇总

基础知识 一、C++ 基础语法 1. C++ 和 C 的区别? * C++ 支持面向对象(封装、继承、多态)。 * C++ 引入模板、STL、异常处理。 2. 值传递、指针传递、引用传递的区别? * 值传递:拷贝一份副本。 * 指针传递:传地址,可修改原数据。 * 引用传递:别名,语法更简洁。 3. const 的用法? * 修饰变量:常量。 * 修饰指针:const int* p(指向常量),int* const p(常指针)。 * 修饰成员函数:void f() const; 表示函数内不能修改成员变量。 4.

By Ne0inhk
Java毕设项目:基于Web的商品预购平台的设计与实现(源码+文档,讲解、调试运行,定制等)

Java毕设项目:基于Web的商品预购平台的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。 主要内容:免费开题报告、任务书、全bao定制+中期检查PPT、代码编写、🚢文编写和辅导、🚢文降重、长期答辩答疑辅导、一对一专业代码讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 特色服务内容:答辩必过班 (全程一对一技术交流,帮助大家顺利完成答辩,小白必选) 全网粉丝50W+,累计帮助2000+完成优秀毕设 🍅文末获取源码🍅 感兴趣的可以先收藏起来,还有大家在毕设选题,

By Ne0inhk