Shell脚本实现递归更新git模块和子模块
git的子仓库并不总是在最新的main,而是在某个提交,每次更新代码的时候,都要挨个git checkout main,然后再git pull origin main。当子仓库多的时候,一个个去操作会很麻烦。
使用脚本,遍历所有的子仓库,将每一个子仓库,切到main并拉取更新。
脚本如下
#!/bin/bash
# 首先获取所有子模块的路径
submodules=$(git submodule status --recursive | awk '{print $2}')
# 遍历所有子模块
for submodule in $submodules; do
echo "正在处理子模块:$submodule"
# 进入子模块目录
cd "$submodule"
# 切换到 main 分支
git checkout main
# 拉取远程 main 分支的最新更改
git pull origin main
# 返回到主仓库目录
cd ..
echo "子模块 $submodule 更新完毕。"
done
echo "所有子模块均已更新。"
第二种方法
#!/bin/bash
# 定义一个函数来更新所有 Git 子模块
update_submodules() {
local main_branch="main"
local remote_name="origin"
echo "正在切换到主仓库的 $main_branch 分支..."
git checkout "$main_branch"
echo "正在获取所有子模块的路径..."
# 递归地获取所有子模块的路径
local submodules=$(git submodule status --recursive | awk '{print $2}')
# 遍历所有子模块
for submodule_path in $submodules; do
echo "正在处理子模块:$submodule_path"
# 进入子模块目录
cd "$submodule_path"
# 切换到 main 分支
git checkout "$main_branch"
# 拉取远程 main 分支的最新更改
git pull "$remote_name" "$main_branch"
# 返回到主仓库目录
cd - > /dev/null
echo "子模块 $submodule_path 更新完毕。"
done
echo "所有子模块均已更新。"
}
# 调用函数
update_submodules