适用于 Git Bash 的脚本,批量提交和推送多个仓库的修改

张开发
2026/4/17 8:32:25 15 分钟阅读

分享文章

适用于 Git Bash 的脚本,批量提交和推送多个仓库的修改
创建批量脚本文件#!/bin/bash# batch_git_ops.sh - 批量提交和推送所有Git仓库的修改echo Git Bash 批量提交和推送工具echo# 设置颜色RED\033[0;31mGREEN\033[0;32mYELLOW\033[1;33mBLUE\033[0;34mNC\033[0m# No Color# 计数器success_count0fail_count0no_changes_count0# 询问是否使用相同的提交信息read-p 是否对所有仓库使用相同的提交信息? (y/n): use_same_msgif[[$use_same_msg~^[Yy]$]];thenread-p 请输入提交信息: commit_messageif[-z$commit_message];thencommit_message批量更新:$(date%Y-%m-%d %H:%M:%S)fifiechoecho 开始扫描当前目录下的Git仓库...echo# 遍历当前目录下的所有子目录fordirin*/;do# 移除末尾的斜杠dir${dir%*/}if[-d$dir/.git];thenechoecho 仓库:$direcho# 进入目录cd$dir||continue# 检查当前分支current_branch$(gitrev-parse --abbrev-ref HEAD)echo 当前分支:$current_branch# 检查是否有未提交的更改if[-n$(gitstatus--porcelain)];thenecho 发现未提交的更改:gitstatus-s# 获取提交信息if[[!$use_same_msg~^[Yy]$]];thenechoread-p 为仓库 $dir 输入提交信息 (留空跳过此仓库): repo_commit_messageif[-z$repo_commit_message];thenecho⏭️ 跳过仓库 $dircd..continuefielserepo_commit_message$commit_messagefi# 添加所有更改echo➕ 添加所有更改到暂存区...gitadd.# 提交更改echo 提交更改...ifgitcommit-m$repo_commit_message;thenecho${GREEN}✅ 提交成功${NC}elseecho${RED}❌ 提交失败${NC}cd..fail_count$((fail_count1))continuefi# 推送更改echo 推送到远程仓库...ifgitpush;thenecho${GREEN}✅ 推送成功${NC}success_count$((success_count1))elseecho${YELLOW}⚠️ 推送失败尝试设置上游分支...${NC}ifgitpush --set-upstream origin$current_branch;thenecho${GREEN}✅ 推送成功${NC}success_count$((success_count1))elseecho${RED}❌ 推送失败${NC}fail_count$((fail_count1))fifielseecho${BLUE} 没有未提交的更改${NC}no_changes_count$((no_changes_count1))fi# 返回上级目录cd..echoelseecho${BLUE}➖ 跳过:$dir(不是Git仓库)${NC}fidoneechoecho 批量操作完成echoecho${GREEN}✅ 成功:$success_count个仓库${NC}echo${BLUE} 无更改:$no_changes_count个仓库${NC}echo${RED}❌ 失败:$fail_count个仓库${NC}# 如果没有任何Git仓库if[$((success_countno_changes_countfail_count))-eq0];thenechoechoℹ️ 提示: 当前目录下没有找到Git仓库echo 请将脚本放在包含Git仓库的目录中运行fi使用方法保存脚本文件# 打开Git Bash创建脚本文件touchbatch_git.sh2.赋予执行权限chmodx batch_git.sh3.赋予执行权限chmodx batch_git.sh4.运行脚本# 进入包含多个Git仓库的目录cd/path/to/your/repos# 运行脚本./batch_git.sh注意事项1.确保已配置SSH密钥避免每次推送都要输入密码2.首次运行前建议先在单个仓库测试脚本3.脚本会提交所有更改包括新文件、修改和删除4.如果有合并冲突脚本可能会失败需要手动处理5.建议定期备份重要数据。

更多文章