如何批量跟踪并提交多个Git仓库?Sourcetree及submodules场景
批量管理多Git仓库的提交与推送方案
你遇到的问题确实是submodules的局限——它仅能实现仓库关联,无法批量执行提交推送操作。下面给你两个直接可用的解决方案:
方法一:自定义脚本一键处理
写个简单的脚本,遍历server和client两个仓库,自动完成暂存、提交(用统一信息)、推送的全流程,无需逐个操作。
Shell脚本(适用于Mac/Linux)
保存为commit-all.sh:
#!/bin/bash COMMIT_MSG="$1" if [ -z "$COMMIT_MSG" ]; then echo "用法:./commit-all.sh '你的提交信息'" exit 1 fi for REPO in server client; do if [ -d "$REPO/.git" ]; then echo "=== 处理仓库: $REPO ===" cd "$REPO" || exit git add . if ! git diff --cached --quiet; then git commit -m "$COMMIT_MSG" git push else echo "$REPO 无变更,跳过" fi cd .. else echo "$REPO 不是Git仓库,跳过" fi done
使用步骤:
- 给脚本添加执行权限:
chmod +x commit-all.sh - 运行脚本并传入提交信息:
./commit-all.sh "修复支付模块前后端数据同步问题"
PowerShell脚本(适用于Windows)
保存为Commit-All.ps1:
param( [Parameter(Mandatory=$true)] [string]$CommitMsg ) $repos = @("server", "client") foreach ($repo in $repos) { $gitDir = Join-Path $repo ".git" if (Test-Path $gitDir) { Write-Host "=== 处理仓库: $repo ===" Set-Location $repo git add . if (-not (git diff --cached --quiet)) { git commit -m $CommitMsg git push } else { Write-Host "$repo 无变更,跳过" } Set-Location .. } else { Write-Host "$repo 不是Git仓库,跳过" } }
使用步骤:
- 打开PowerShell,进入脚本所在目录
- 运行脚本:
.\Commit-All.ps1 -CommitMsg "修复支付模块前后端数据同步问题"
方法二:在Sourcetree中配置自定义操作
如果习惯用Sourcetree操作,可以把脚本集成到软件里,一键触发:
- 打开Sourcetree,点击顶部菜单「工具」→「自定义操作」→「添加」
- 在弹窗中填写:
- 名称:批量提交双仓库
- 脚本路径:选择你刚才保存的脚本文件
- 工作目录:设置为包含
server和client的根文件夹路径 - 勾选「显示输出」,方便查看执行状态
- 保存后,在Sourcetree的「自定义操作」菜单里就能找到这个选项,点击即可自动完成两个仓库的提交推送。
内容的提问来源于stack exchange,提问作者trueicecold
相关产品推荐
相关产品推荐

