创建批量脚本文件
bash
#!/bin/bash
# batch_git_ops.sh - 批量提交和推送所有Git仓库的修改
echo "🚀 Git Bash 批量提交和推送工具"
echo "======================================"
# 设置颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 计数器
success_count=0
fail_count=0
no_changes_count=0
# 询问是否使用相同的提交信息
read -p "🔤 是否对所有仓库使用相同的提交信息? (y/n): " use_same_msg
if [[ $use_same_msg =~ ^[Yy]$ ]]; then
read -p "📝 请输入提交信息: " commit_message
if [ -z "$commit_message" ]; then
commit_message="批量更新: $(date '+%Y-%m-%d %H:%M:%S')"
fi
fi
echo ""
echo "🔍 开始扫描当前目录下的Git仓库..."
echo ""
# 遍历当前目录下的所有子目录
for dir in */; do
# 移除末尾的斜杠
dir=${dir%*/}
if [ -d "$dir/.git" ]; then
echo "======================================"
echo "📁 仓库: $dir"
echo "======================================"
# 进入目录
cd "$dir" || continue
# 检查当前分支
current_branch=$(git rev-parse --abbrev-ref HEAD)
echo "🌿 当前分支: $current_branch"
# 检查是否有未提交的更改
if [ -n "$(git status --porcelain)" ]; then
echo "📄 发现未提交的更改:"
git status -s
# 获取提交信息
if [[ ! $use_same_msg =~ ^[Yy]$ ]]; then
echo ""
read -p "📝 为仓库 '$dir' 输入提交信息 (留空跳过此仓库): " repo_commit_message
if [ -z "$repo_commit_message" ]; then
echo "⏭️ 跳过仓库 '$dir'"
cd ..
continue
fi
else
repo_commit_message="$commit_message"
fi
# 添加所有更改
echo "➕ 添加所有更改到暂存区..."
git add .
# 提交更改
echo "💾 提交更改..."
if git commit -m "$repo_commit_message"; then
echo "${GREEN}✅ 提交成功${NC}"
else
echo "${RED}❌ 提交失败${NC}"
cd ..
fail_count=$((fail_count + 1))
continue
fi
# 推送更改
echo "📤 推送到远程仓库..."
if git push; then
echo "${GREEN}✅ 推送成功${NC}"
success_count=$((success_count + 1))
else
echo "${YELLOW}⚠️ 推送失败,尝试设置上游分支...${NC}"
if git push --set-upstream origin "$current_branch"; then
echo "${GREEN}✅ 推送成功${NC}"
success_count=$((success_count + 1))
else
echo "${RED}❌ 推送失败${NC}"
fail_count=$((fail_count + 1))
fi
fi
else
echo "${BLUE}📭 没有未提交的更改${NC}"
no_changes_count=$((no_changes_count + 1))
fi
# 返回上级目录
cd ..
echo ""
else
echo "${BLUE}➖ 跳过: $dir (不是Git仓库)${NC}"
fi
done
echo "======================================"
echo "📊 批量操作完成!"
echo "======================================"
echo "${GREEN}✅ 成功: $success_count 个仓库${NC}"
echo "${BLUE}📭 无更改: $no_changes_count 个仓库${NC}"
echo "${RED}❌ 失败: $fail_count 个仓库${NC}"
# 如果没有任何Git仓库
if [ $((success_count + no_changes_count + fail_count)) -eq 0 ]; then
echo ""
echo "ℹ️ 提示: 当前目录下没有找到Git仓库"
echo " 请将脚本放在包含Git仓库的目录中运行"
fi
使用方法
- 保存脚本文件
bash
# 打开Git Bash,创建脚本文件
touch batch_git.sh
2.赋予执行权限
bash
chmod +x batch_git.sh
3.赋予执行权限
bash
chmod +x batch_git.sh
4.运行脚本
bash
# 进入包含多个Git仓库的目录
cd /path/to/your/repos
# 运行脚本
./batch_git.sh
注意事项
1.确保已配置SSH密钥,避免每次推送都要输入密码;
2.首次运行前建议先在单个仓库测试脚本;
3.脚本会提交所有更改,包括新文件、修改和删除;
4.如果有合并冲突,脚本可能会失败,需要手动处理;
5.建议定期备份重要数据。