实验八 版本控制

实验八 版本控制

一、实验目的

掌握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 已预装,可跳过)
bash 复制代码
检查 Git 是否安装
打开终端(Ctrl+Alt+T),输入:

bash

git --version


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

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

设置用户名和邮箱

bash 复制代码
bash

git config --global user.name "李海宁"  # 你的姓名git config --global user.email "[email protected]"  # 你的邮箱
bash 复制代码
检查配置:

bash

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


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

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

三、实验步骤 4:创建文件 & 提交入库
bash 复制代码
创建 4 个文件

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

编写 zs1 脚本(倒序输出参数)

用文本编辑器打开 zs1:

bash 复制代码
nano zs1  # 或用vim等编辑器
bash 复制代码
输入以下内容(保存后按 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 复制代码
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,设计实验如何处理这种冲突,最终实现分支的合并。

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

场景:

bash 复制代码
主分支(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 复制代码
合并分支,触发冲突
bash
git merge dev  # 合并时会提示冲突

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

分支修改:添加一行

bash 复制代码
>>>>>>> dev

删除冲突标记,保留正确内容(例如合并两行),保存后:

bash

git add aa # 标记冲突已解决

git commit -m "解决aa文件冲突" # 提交合并结果

相关推荐
StarRocks_labs2 小时前
从InfluxDB到StarRocks:Grab实现Spark监控平台10倍性能提升
大数据·数据库·starrocks·分布式·spark·iris·物化视图
若兰幽竹3 小时前
【Spark分析HBase数据】Spark读取并分析HBase数据
大数据·spark·hbase
R²AIN SUITE4 小时前
金融合规革命:R²AIN SUITE 如何重塑银行业务智能
大数据·人工智能
绿算技术5 小时前
“强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
大数据·人工智能·智能家居
只因只因爆6 小时前
spark的缓存
大数据·缓存·spark
Leo.yuan6 小时前
3D 数据可视化系统是什么?具体应用在哪方面?
大数据·数据库·3d·信息可视化·数据分析
只因只因爆7 小时前
spark小任务
大数据·分布式·spark
cainiao0806057 小时前
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
java·大数据·开发语言
End92810 小时前
Spark之搭建Yarn模式
大数据·分布式·spark
我爱写代码?10 小时前
Spark 集群配置、启动与监控指南
大数据·开发语言·jvm·spark·mapreduce