|
@@ -28,6 +28,39 @@ echo ">>> 拉取子模块..."
|
|
|
git submodule update --init --recursive --remote
|
|
git submodule update --init --recursive --remote
|
|
|
|
|
|
|
|
echo ""
|
|
echo ""
|
|
|
-echo "完成: 所有子工程已拉取完成"
|
|
|
|
|
|
|
+echo ">>> 为子模块创建/切换到本地跟踪分支..."
|
|
|
|
|
+
|
|
|
|
|
+# 新增:为每个子模块创建并切换到对应的本地分支
|
|
|
|
|
+git submodule foreach --recursive '
|
|
|
|
|
+ # 获取 .gitmodules 中为该子模块配置的分支名
|
|
|
|
|
+ branch=$(git config -f "$toplevel/.gitmodules" "submodule.$name.branch")
|
|
|
|
|
+
|
|
|
|
|
+ # 若未配置分支,尝试从远程仓库获取默认分支(通常为 master/main)
|
|
|
|
|
+ if [ -z "$branch" ]; then
|
|
|
|
|
+ # 通过 git ls-remote 获取远程 HEAD 指向的分支
|
|
|
|
|
+ remote_head=$(git ls-remote --symref origin HEAD 2>/dev/null | head -n1 | awk "{print \$2}" | sed "s|refs/heads/||")
|
|
|
|
|
+ branch=${remote_head:-master}
|
|
|
|
|
+ echo " [$name] 未配置 branch,使用默认分支: $branch"
|
|
|
|
|
+ else
|
|
|
|
|
+ echo " [$name] 配置分支: $branch"
|
|
|
|
|
+ fi
|
|
|
|
|
+
|
|
|
|
|
+ # 拉取远程分支最新数据
|
|
|
|
|
+ git fetch origin "$branch"
|
|
|
|
|
+
|
|
|
|
|
+ # 如果本地分支已存在,则直接切换;否则创建跟踪分支
|
|
|
|
|
+ if git show-ref --verify --quiet "refs/heads/$branch"; then
|
|
|
|
|
+ echo " [$name] 本地分支 $branch 已存在,直接切换"
|
|
|
|
|
+ git checkout "$branch"
|
|
|
|
|
+ # 可选:将本地分支重置为远程最新(如需强制同步可取消注释)
|
|
|
|
|
+ # git reset --hard "origin/$branch"
|
|
|
|
|
+ else
|
|
|
|
|
+ echo " [$name] 创建本地分支 $branch 并跟踪 origin/$branch"
|
|
|
|
|
+ git checkout -b "$branch" --track "origin/$branch"
|
|
|
|
|
+ fi
|
|
|
|
|
+'
|
|
|
|
|
+
|
|
|
|
|
+echo ""
|
|
|
|
|
+echo "完成: 所有子工程已拉取完成,并已切换到本地跟踪分支"
|
|
|
echo "子模块列表:"
|
|
echo "子模块列表:"
|
|
|
git submodule status
|
|
git submodule status
|