6.9 KiB
6.9 KiB
HYF 项目
这是一个使用 Git Submodules 管理的 Maven 多模块项目。
项目结构
hyf/
├── pom.xml # 父项目 POM
├── thingsboard-client-demo/ # 子模块1(Git Submodule)
└── thingsboard-gateway-ws-demo/ # 子模块2(Git Submodule)
一、如何添加一个新的 Module
1.1 创建并初始化新模块的 Git 仓库
# 在本地创建新模块目录和代码
cd /Users/sunpeng/workspace/hyf
mkdir new-module
cd new-module
# 初始化 Git 仓库
git init
git add .
git commit -m "Initial commit: new module"
# 关联远程仓库并推送
git remote add origin <新模块的远程仓库URL>
git branch -M main
git push -u origin main
1.2 将新模块添加为 Submodule
# 回到根目录
cd /Users/sunpeng/workspace/hyf
# 删除本地的新模块目录
rm -rf new-module
# 添加为 Git Submodule
git submodule add <新模块的远程仓库URL> new-module
# 提交 submodule 配置
git add .
git commit -m "Add new-module as submodule"
git push
1.3 更新父项目 pom.xml
编辑根目录的 pom.xml,在 <modules> 标签中添加新模块:
<modules>
<module>thingsboard-client-demo</module>
<module>thingsboard-gateway-ws-demo</module>
<module>new-module</module>
</modules>
提交修改:
git add pom.xml
git commit -m "Add new-module to parent pom"
git push
二、如何更新 Module(子模块)
2.1 修改子模块代码
# 进入子模块目录
cd thingsboard-client-demo
# 修改代码后提交
git add .
git commit -m "描述你的修改内容"
git push
2.2 在主仓库中更新子模块引用
重要:修改子模块后,主仓库需要更新对子模块 commit 的引用。
# 回到根目录
cd /Users/sunpeng/workspace/hyf
# 查看子模块状态(会显示子模块有新的 commit)
git status
# 提交子模块引用的更新
git add thingsboard-client-demo
git commit -m "Update thingsboard-client-demo submodule"
git push
2.3 同时修改多个子模块
# 1. 提交第一个子模块
cd thingsboard-client-demo
git add .
git commit -m "修改客户端代码"
git push
# 2. 提交第二个子模块
cd ../thingsboard-gateway-ws-demo
git add .
git commit -m "修改网关代码"
git push
# 3. 回到根目录,更新所有子模块引用
cd ..
git add .
git commit -m "Update submodules"
git push
三、如何拉代码并更新各个子模块
3.1 首次克隆项目(推荐方式)
# 一次性克隆主仓库和所有子模块
git clone --recursive <主仓库URL>
3.2 首次克隆项目(分步方式)
# 先克隆主仓库
git clone <主仓库URL>
cd hyf
# 初始化并拉取所有子模块
git submodule init
git submodule update
3.3 已有项目,拉取最新代码
cd /Users/sunpeng/workspace/hyf
# 拉取主仓库最新代码
git pull
# 更新所有子模块到主仓库记录的版本
git submodule update
# 或者:更新所有子模块到各自远程仓库的最新版本
git submodule update --remote
3.4 拉取特定子模块的最新代码
# 进入子模块目录
cd thingsboard-client-demo
# 拉取该子模块的最新代码
git pull origin main
# 回到根目录,提交子模块引用的更新
cd ..
git add thingsboard-client-demo
git commit -m "Update thingsboard-client-demo to latest"
git push
四、如何更新主模块和子模块
4.1 只修改了主模块(根目录文件)
cd /Users/sunpeng/workspace/hyf
# 修改了 pom.xml、.gitignore 等根目录文件
git add .
git commit -m "描述主模块的修改内容"
git push
4.2 同时修改了主模块和子模块
# 1. 先提交所有子模块的修改
cd thingsboard-client-demo
git add .
git commit -m "修改客户端代码"
git push
cd ../thingsboard-gateway-ws-demo
git add .
git commit -m "修改网关代码"
git push
# 2. 回到根目录,提交主模块和子模块引用的更新
cd ..
git add .
git commit -m "Update main module and submodules"
git push
4.3 团队协作:同步他人的修改
当其他人修改了主模块或子模块后,你需要同步:
cd /Users/sunpeng/workspace/hyf
# 拉取主仓库最新代码
git pull
# 更新所有子模块到主仓库记录的版本
git submodule update --init --recursive
注意:--init 参数会自动初始化新添加的子模块。
常用命令速查
查看状态
# 查看主仓库状态
git status
# 查看所有子模块状态
git submodule foreach git status
# 查看子模块的详细信息
git submodule status
批量操作子模块
# 在所有子模块中执行命令
git submodule foreach <command>
# 例如:在所有子模块中拉取最新代码
git submodule foreach git pull origin main
# 例如:在所有子模块中查看当前分支
git submodule foreach git branch
子模块更新
# 更新子模块到主仓库记录的版本
git submodule update
# 更新子模块到远程最新版本
git submodule update --remote
# 初始化并更新所有子模块(包括新添加的)
git submodule update --init --recursive
Maven 构建
# 在根目录构建所有模块
mvn clean install
# 只构建特定模块
mvn clean install -pl thingsboard-client-demo
# 构建特定模块及其依赖
mvn clean install -pl thingsboard-client-demo -am
重要注意事项
- 子模块修改流程:先在子模块目录提交并推送,再回到主仓库更新子模块引用
- 主仓库记录的是子模块的特定 commit,不是分支名
- 克隆项目时务必使用
--recursive,或手动执行git submodule update --init - 拉取代码后记得执行
git submodule update,确保子模块版本正确 - 团队协作时,确保所有成员理解 submodule 的工作方式,避免子模块版本混乱
工作流程示例
日常开发流程
# 1. 早上开始工作,拉取最新代码
cd /Users/sunpeng/workspace/hyf
git pull
git submodule update --init --recursive
# 2. 修改子模块代码
cd thingsboard-client-demo
# ... 编写代码 ...
git add .
git commit -m "实现新功能"
git push
# 3. 更新主仓库的子模块引用
cd ..
git add thingsboard-client-demo
git commit -m "Update thingsboard-client-demo"
git push
# 4. 如果修改了主模块配置
git add pom.xml
git commit -m "更新依赖版本"
git push
添加新功能模块流程
# 1. 创建新模块仓库并推送
mkdir new-feature
cd new-feature
git init
# ... 创建代码 ...
git add .
git commit -m "Initial commit"
git remote add origin <新模块URL>
git push -u origin main
# 2. 添加为 submodule
cd /Users/sunpeng/workspace/hyf
rm -rf new-feature
git submodule add <新模块URL> new-feature
# 3. 更新 pom.xml
# 编辑 pom.xml,添加 <module>new-feature</module>
git add .
git commit -m "Add new-feature module"
git push