hyf/reademe/submodule/reademe.md

6.9 KiB
Raw Blame History

HYF 项目

这是一个使用 Git Submodules 管理的 Maven 多模块项目。

项目结构

hyf/
├── pom.xml                           # 父项目 POM
├── thingsboard-client-demo/          # 子模块1Git Submodule
└── thingsboard-gateway-ws-demo/      # 子模块2Git 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

重要注意事项

  1. 子模块修改流程:先在子模块目录提交并推送,再回到主仓库更新子模块引用
  2. 主仓库记录的是子模块的特定 commit,不是分支名
  3. 克隆项目时务必使用 --recursive,或手动执行 git submodule update --init
  4. 拉取代码后记得执行 git submodule update,确保子模块版本正确
  5. 团队协作时,确保所有成员理解 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