实验八 版本控制

news2025/4/26 1:07:39

实验八 版本控制

一、实验目的

掌握Git基本命令的使用。

二、实验内容

1.理解版本控制工具的意义。
2.安装Windows和Linux下的git工具。
3.利用git bash结合常用Linux命令管理文件和目录。
4.利用git创建本地仓库并进行简单的版本控制实验。

三、主要实验步骤

1.下载并安装合适的git版本。https://git-scm.com/(注意:已安装或配置完可忽略本步骤或下边相关步骤,教程可参考https://gitee.com/all-about-git)

一、实验准备:安装 Git(Ubuntu 已预装,可跳过)
检查 Git 是否安装
打开终端(Ctrl+Alt+T),输入:

bash

git --version

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如果输出类似 git version 2.34.1,说明已安装,直接进入下一步;否则继续安装。

二、实验步骤 3:配置 Git & 初始化仓库

设置用户名和邮箱

bash

git config --global user.name "李海宁"  # 你的姓名git config --global user.email "202214060153@xxx.com"  # 你的邮箱

在这里插入图片描述

检查配置:

bash

cat ~/.gitconfig  # 查看全局配置
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0d22c43c7c5b456f8ada82e9e66212b2.png)


检查配置:
bash
cat ~/.gitconfig  # 查看全局配置
创建工作目录并初始化仓库
bash
mkdir ~/zhangsangit  # 创建目录
cd ~/zhangsangit  # 进入目录
git init  # 初始化本地仓库

在这里插入图片描述

此时目录下会生成隐藏的 .git 文件夹(用 ls -a 查看)。

在这里插入图片描述

三、实验步骤 4:创建文件 & 提交入库
创建 4 个文件

touch zs1 zs2 zs3 zs4  # 创建4个空白文件

在这里插入图片描述

编写 zs1 脚本(倒序输出参数)
用文本编辑器打开 zs1:

nano zs1  # 或用vim等编辑器
输入以下内容(保存后按 Ctrl+O,回车,Ctrl+X 退出):
bash
#!/bin/bash
echo "倒序参数:$(echo "$" | tr ' ' '\n' | tac | tr '\n' ' ')"

赋予执行权限:
bash
chmod +x zs1

忽略 zs4 文件
创建 .gitignore 文件并添加内容:
bash
echo "zs4" > .gitignore  # 直接写入忽略名单

提交到仓库
bash
git add .  # 添加所有文件(zs4会被忽略)
git commit -m "首次提交:创建zs1、zs2、zs3,忽略zs4"  # 提交并备

在这里插入图片描述

四、实验步骤 5:修改文件 & 再次提交

修改 zs1:添加输出当前时间
编辑 zs1,在末尾添加:
bash
echo “当前时间:$(date)”

保存后提交:
bash
git add zs1 # 只添加修改的文件
git commit -m “修改zs1:增加输出当前时间”

修改 zs3:写入当前日期到文件
bash
echo “当前日期:$(date)” > zs3 # 重定向日期到zs3
git add zs3
git commit -m “修改zs3:写入当前日期”

在这里插入图片描述

五、实验步骤 6:删除 zs3 & 写入 zs2

删除 zs3 文件
bash
rm zs3 # 删除文件
git rm zs3 # 告诉Git删除该文件(加入暂存区)

写入当前日期到 zs2
bash
echo “当前日期:$(date)” > zs2 # 重定向到zs2
git add zs2
git commit -m “删除zs3,写入日期到zs2”

在这里插入图片描述

六、实验步骤 7:恢复 zs3 并改名

恢复 zs3(从历史版本)
先查看历史提交(找到删除 zs3 前的提交 ID):
bash
git log # 记录,例如 abc123
git checkout abc123 – zs3 # 从历史版本恢复zs3

复制恢复的 zs3 并改名:
bash
cp zs3 zsapple # 复制为zsapple
git add zsapple # 添加新文件
git commit -m “恢复zs3并改名zsapple”

在这里插入图片描述
在这里插入图片描述

七、实验步骤 8:创建分支 & 修改文件

创建分支并切换

bash
git branch zhangsanbranch  # 创建分支
git checkout zhangsanbranch  # 切换到新分支

或用简写:git switch -c zhangsanbranch

修改 zs2:追加系统版本信息
bash
echo “系统版本:$(lsb_release -a)” >> zs2 # 追加内容到zs2
git add zs2
git commit -m “分支修改:追加系统版本到zs2”

在这里插入图片描述

八、实验步骤 9:合并分支到主分支

切换回主分支(默认是 main 或 master)
bash
git checkout main # 或git switch main

合并分支
bash
git merge zhangsanbranch # 合并分支

如果无冲突,直接完成;若有冲突(后续作业五会用到),按提示解决(见下方作业五示例)。

四、思考题
集中式和分布式版本控制系统有什么区别?各有哪些代表性的工具。

四、思考题

集中式和分布式版本控制系统的区别:
  1. 数据存储方式

    • 集中式:所有版本数据存储在中央服务器(如SVN的Repository),本地仅保存工作副本,不保存完整历史记录。
    • 分布式:每个用户本地都有完整的版本库(包括所有提交历史和元数据),无需依赖中央服务器即可进行提交、分支等操作。
  2. 离线操作能力

    • 集中式:必须联网连接中央服务器才能提交代码、获取更新,离线时只能进行本地修改,无法提交或同步。
    • 分布式:支持离线操作,所有操作(如提交、分支、合并)均可在本地完成,联网后再与远程仓库同步。
  3. 分支与协作

    • 集中式:分支创建和管理依赖中央服务器,成本较高,协作时容易出现分支冲突,且权限控制较严格(需服务器端配置)。
    • 分布式:分支创建轻量(仅本地文件操作),支持并行开发,协作时通过分支合并解决冲突,灵活性更高。
  4. 容灾与安全性

    • 集中式:中央服务器是单点故障,若服务器损坏或数据丢失,可能导致所有历史记录丢失。
    • 分布式:每个节点都有完整备份,即使中央仓库损坏,也可从任意一个本地仓库恢复数据,安全性更高。
  5. 依赖关系

    • 集中式:高度依赖中央服务器,网络延迟会影响操作效率。
    • 分布式:本地操作优先,网络仅用于同步,对网络环境要求较低。
代表性工具:
  • 集中式版本控制系统

    • SVN(Subversion):开源、广泛用于企业项目,支持版本控制、事务性提交,但分支管理较繁琐。
    • CVS(Concurrent Versions System):早期流行的集中式工具,功能较基础,现已逐渐被SVN取代。
    • Perforce(P4):商业软件,适合大型团队和二进制文件管理,权限控制严格。
  • 分布式版本控制系统

    • Git:开源、目前最流行,支持高效的分支管理、分布式协作,广泛用于GitHub、GitLab、Gitee等平台。
    • Mercurial:开源、轻量,语法简洁,适合个人或小型团队,代表项目如Python官方仓库。
    • Bazaar:开源、支持分布式和集中式模式,用户友好,曾用于Ubuntu系统开发。
总结

集中式系统适合对权限控制严格、网络环境稳定的场景,而分布式系统因其离线能力、高可靠性和灵活的分支管理,成为现代软件开发的主流选择(如Git占据绝对主导地位)。

————————————————
作业五
Git当中开启分支后,修改了某文件aa,与此同时主分支也修改了某文件aa,设计实验如何处理这种冲突,最终实现分支的合并。

作业五:处理分支冲突(实验设计)
场景:

主分支(main)和分支(dev)同时修改了文件 aa,需要合并时解决冲突。
步骤:
创建测试文件并提交
bash
echo "初始内容" > aa  # 创建aa文件
git add aa && git commit -m "添加aa文件"

创建分支并修改 aa
bash
git branch dev && git checkout dev  # 新建dev分支
echo "分支修改:添加一行" >> aa  # 修改aa
git commit -a -m "dev分支修改aa"

主分支同时修改 aa
bash
git checkout main # 切回主分支
echo “主分支修改:删除一行” >> aa # 修改aa(与分支冲突)
git commit -a -m “main分支修改aa”

合并分支,触发冲突
bash
git merge dev  # 合并时会提示冲突

解决冲突
打开 aa 文件,会看到冲突标记:
plaintext
<<<<<<< HEAD
主分支修改:删除一行
=======

分支修改:添加一行

>>>>>>> dev

删除冲突标记,保留正确内容(例如合并两行),保存后:
bash
git add aa # 标记冲突已解决
git commit -m “解决aa文件冲突” # 提交合并结果

在这里插入图片描述

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

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

相关文章

JavaWeb:Web介绍

Web开篇 什么是web? Web网站工作流程 网站开发模式 Web前端开发 初识web Web标准 HtmlCss 什么是Html? 什么是CSS?

教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!

教育行业面临的终端安全问题日益突出&#xff0c;主要源于教育信息化进程的加速、终端设备多样化以及网络环境的开放性。 以下是教育行业终端安全面临的主要挑战&#xff1a; 1、设备类型复杂化 问题&#xff1a;教育机构使用的终端设备包括PC、服务器等&#xff0c;操作系统…

Spring Boot知识点详解

打包部署 <!‐‐ 这个插件&#xff0c;可以将应用打包成一个可执行的jar包&#xff1b;‐‐> <build><plugins> <plugin> <groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐maven‐plugin</artifactId&g…

DNS主从同步及解析

DNS 域名解析原理 域名系统的层次结构 &#xff1a;DNS 采用分层树状结构&#xff0c;顶级域名&#xff08;如.com、.org、.net 等&#xff09;位于顶层&#xff0c;下面是二级域名、三级域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是顶级域名…

在Windows11上用wsl配置docker register 镜像地址

一、下载软件 1、下载wsl:安装 WSL | Microsoft Learn,先按照旧版 WSL 的手动安装步骤 | Microsoft Learn的步骤走 注:如果wsl2怎么都安装不下来,可能是Hyper-V没有打开,打开控制面板->程序和功能->启用或关闭Windows功能,勾选Hyper-V 如果Windows功能里面没有Hyp…

【Linux网络】构建UDP服务器与字典翻译系统

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

【PGCCC】Postgres 故障排除:修复重复的主键行

如何从表中删除不需要的重复行。这些重复行之所以“不需要”&#xff0c;是因为同一个值在指定为主键的列中出现多次。自从 glibc 好心地改变了排序方式后&#xff0c;我们发现这个问题有所增加。当用户升级操作系统并修改底层 glibc 库时&#xff0c;这可能会导致无效索引。 唯…

DeepSeek+Cursor+Devbox+Sealos项目实战

黑马程序员DeepSeekCursorDevboxSealos带你零代码搞定实战项目开发部署视频教程&#xff0c;基于AI完成项目的设计、开发、测试、联调、部署全流程 原视频地址视频选的项目非常基础&#xff0c;基本就是过了个web开发流程&#xff0c;但我在实际跟着操作时&#xff0c;ai依然会…

996引擎-拓展变量:物品变量

996引擎-拓展变量:物品变量 测试代码参考资料对于Lua来说,只有能保存数据库的变量才有意义。 至于临时变量,不像TXT那么束手束脚,通常使用Lua变量就能完成。 SELECT * FROM dbo.TBL_ITEM_EX_ABIL WHERE FLD_MAKEINDEX = 28620 <

【踩坑记录】stm32 jlink程序烧录不进去

最近通过Jlink给STM32烧写程序时一直报错&#xff0c;但是换一个其他工程就可以烧录&#xff0c;对比了一下jink配置&#xff0c;发现是速率选太高了“SW Device”&#xff0c;将烧录速率调整到10MHz以下就可以了

‌RISC-V低功耗MCU动态时钟门控技术详解

我来分享一下RISC-V核低功耗MCU的动态时钟门控技术实现&#xff1a; 这款MCU通过硬件级时钟门控电路实现了模块级的功耗管理。当外设&#xff08;如UART、SPI&#xff09;处于闲置状态时&#xff0c;系统会自动切断其时钟信号&#xff0c;减少无效翻转功耗。同时支持多电压域协…

工厂模式:解耦对象创建与使用的设计模式

工厂模式&#xff1a;解耦对象创建与使用的设计模式 一、模式核心&#xff1a;封装对象创建逻辑&#xff0c;客户端无需关心具体实现 在软件开发中&#xff0c;当创建对象的逻辑复杂或频繁变化时&#xff0c;直接在客户端代码中 new 对象会导致耦合度高、难以维护。例如&…

Python爬虫学习:高校数据爬取与可视化

本项目实现了从中国教育在线&#xff08;eol.cn&#xff09;的公开 API 接口爬取高校相关数据&#xff0c;并对数据进行清洗、分析与可视化展示。主要包括以下功能&#xff1a; 爬取高校基础信息及访问量数据数据清洗与格式转换多维度数据分析与可视化&#xff0c;如高校数量分…

触觉智能RK3506核心板,工业应用之RK3506 RT-Linux实时性测试

在工业自动化、机械臂控制等高实时性场景中&#xff0c;系统响应速度与稳定性直接决定设备效能。触觉智能RK3506核心板基于瑞芯微三核Cortex-A7架构深度优化&#xff0c;搭载Linux 6.1内核并支持Linux-RT实时系统&#xff0c;提供实时性能的高性价比解决方案。 RK3506与RT-Linu…

基于SpringBoot的高校体育馆场地预约管理系统-项目分享

基于SpringBoot的高校体育馆场地预约管理系统-项目分享 项目介绍项目摘要目录总体功能图用户实体图赛事实体图项目预览用户个人中心医生信息管理用户管理场地信息管理登录 最后 项目介绍 使用者&#xff1a;管理员 开发技术&#xff1a;MySQLJavaSpringBootVue 项目摘要 随着…

华为云获取IAM用户Token的方式及适用分析

&#x1f9e0; 一、为什么要获取 IAM 用户 Token&#xff1f; 我们用一个生活中的比喻来解释&#x1f447;&#xff1a; &#x1f3e2; 比喻场景&#xff1a; 你要去一个 高级写字楼&#xff08;华为云物联网平台&#xff09; 办事&#xff08;调用接口管理设备&#xff09;&…

如何利用快照与备份快速恢复服务器的数据

在服务器上利用**快照&#xff08;Snapshot&#xff09;**和**备份&#xff08;Backup&#xff09;**快速恢复数据&#xff0c;可显著减少停机时间并确保业务连续性。以下是具体操作步骤和最佳实践&#xff1a; --- ### **1. 快照&#xff08;Snapshot&#xff09;恢复** **适…

Git 详细使用说明文档(适合小白)

Git 详细使用说明文档&#xff08;适合小白&#xff09; 1. 什么是 Git&#xff1f; Git 是一个版本控制系统&#xff0c;帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作&#xff0c;Git 都能帮助你记录代码的历史版本&#xff0c;方便回溯和协作。 2. 安装 Git …

Graph Database Self-Managed Neo4j 知识图谱存储实践1:安装和基础知识学习

Neo4j 是一个原生图数据库&#xff0c;这意味着它在存储层实现了真正的图模型。它不是在其他技术之上使用“图抽象”&#xff0c;而是以您在白板上绘制想法的相同方式在Neo4j中存储数据。 自2007年以来&#xff0c;Neo4j已经发展成为一个丰富的工具、应用程序和库的生态系统。…

一天学完Servlet!!!(万字总结)

文章目录 前言Servlet打印Hello ServletServlet生命周期 HttpServletRequest对象常用api方法请求乱码问题请求转发request域对象 HttpServletResponse对象响应数据响应乱码问题请求重定向请求转发与重定向区别 Cookie对象Cookie的创建与获取Cookie设置到期时间Cookie注意点Cook…