本文目录导读:

- 批量更新多个Git仓库(最常用)
- 自动解决合并冲突(简陋方案 + 手动确认)
- 自动提交和推送(适合临时或个人仓库)
- 自动清理已合并的分支
- 自动创建并推送标签(版本发布)
- 全自动Git同步(双向同步)
- 监控文件变化并自动提交(带watch)
- 自动同步到多个远程仓库(GitHub + Gitee + GitLab)
- 自动化Git仓库健康检查
- 自动化Git仓库初始化(模板化)
- 自动化执行方式总结
- 风险与最佳实践
- 如果你想让我帮你写一个特定场景的自动化脚本,告诉我:
是的,可以,而且有很多实用的脚本可以自动管理Git仓库,这些脚本通常用Shell(Bash)、Python 或 PowerShell 编写,能够帮你完成批量操作、自动化工作流、代码审查、备份等任务。
下面我按场景给你整理几个实用脚本示例,并说明如何用它们自动管理Git仓库。
批量更新多个Git仓库(最常用)
如果你有多个项目放在同一个目录下(~/projects/),逐个 git pull 很烦。
脚本:batch-git-pull.sh
#!/bin/bash
# 批量更新当前目录下所有Git仓库
for dir in */; do
if [ -d "$dir/.git" ]; then
echo "正在更新: $dir"
cd "$dir"
git pull --rebase
cd ..
fi
done
echo "所有仓库已更新。"
自动执行方式:
- 放入crontab每天定时执行:
0 9 * * 1-5 /path/to/batch-git-pull.sh - 或放到
.bashrc里作为命令别名。
自动解决合并冲突(简陋方案 + 手动确认)
脚本:auto-merge.sh(假设使用 ours 或 theirs 策略)
#!/bin/bash # 自动合并分支并选择保留当前分支的代码 # 慎用:会丢弃对方改动 BRANCH=$1 git checkout main git merge -X theirs "$BRANCH" # 或 -X ours git push origin main
实用建议: 合并冲突通常需要人工判断,脚本只能处理简单策略,推荐用工具(如 git mergetool)辅助,而非完全自动化。
自动提交和推送(适合临时或个人仓库)
脚本:auto-commit.sh
#!/bin/bash
# 自动添加、提交并推送(慎用于团队项目)
MESSAGE="${1:-自动提交 $(date '+%Y-%m-%d %H:%M:%S')}"
git add -A
git commit -m "$MESSAGE"
git push origin $(git rev-parse --abbrev-ref HEAD)
风险警告: 不要用在多人协作的主分支上,容易产生无意义提交或覆盖他人代码,只适合个人备份或临时仓库。
自动清理已合并的分支
脚本:clean-branches.sh
#!/bin/bash # 删除本地所有已合并到main的分支 git checkout main git pull git branch --merged | grep -v '\*\|main\|master' | xargs -n 1 git branch -d
进阶: 加上 --remote 可以清理远程合并分支:
git push origin --delete <branch_name>
自动创建并推送标签(版本发布)
脚本:release-tag.sh
#!/bin/bash # 自动创建带日期的标签并推送 VERSION="v$(date '+%Y%m%d%H%M')" git tag -a "$VERSION" -m "自动版本发布 $VERSION" git push origin "$VERSION"
全自动Git同步(双向同步)
脚本:sync-repo.sh(适用多台电脑间同步代码)
#!/bin/bash # 拉取最新 -> 本地修改 -> 提交 -> 推送(一次性双向同步) git pull --rebase git add -A git commit -m "自动同步 $(date)" git push
常用于: 两台电脑间共享配置文件、笔记或小项目。
监控文件变化并自动提交(带watch)
工具:entr + inotify(Linux)或 fswatch(macOS)
脚本:watch-and-commit.sh
#!/bin/bash
# 监控当前目录下所有文件变化,自动提交
fswatch -o . | while read f; do
git add -A
git commit -m "自动提交 $(date)"
done
注意: 这种脚本会产生大量小提交,适合日志或笔记类项目,不适合正式开发。
自动同步到多个远程仓库(GitHub + Gitee + GitLab)
脚本:push-multi.sh
#!/bin/bash
# 推送到多个远程仓库
REMOTES=("origin" "github" "gitee" "gitlab")
for remote in "${REMOTES[@]}"; do
git push "$remote" main
done
前提: 你需要先添加多个远程地址:
git remote add github https://github.com/user/repo.git git remote add gitee https://gitee.com/user/repo.git
自动化Git仓库健康检查
脚本:check-git-repos.sh
#!/bin/bash
# 检查目录下所有仓库是否正常
for repo in */; do
cd "$repo"
if git status --porcelain | grep -q '^'; then
echo "🔄 $repo: 有未提交的修改"
fi
if [ $(git rev-list --count HEAD..@{u}) -gt 0 ]; then
echo "⬆️ $repo: 落后远程仓库"
fi
cd ..
done
自动化Git仓库初始化(模板化)
脚本:git-init-with-template.sh
#!/bin/bash # 创建新仓库,添加.gitignore、README、LICENSE PROJECT=$1 mkdir "$PROJECT" cd "$PROJECT" git init # 自动填充模板文件 echo "# $PROJECT" > README.md echo "node_modules/" > .gitignore echo "MIT License" > LICENSE git add -A git commit -m "初始提交"
自动化执行方式总结
| 场景 | 建议方案 | 示例 |
|---|---|---|
| 每天定时拉取更新 | cron job | 0 8 * * 1-5 /path/to/pull.sh |
| 每次代码保存后自动提交 | git hooks(pre-commit 或 post-commit) |
.git/hooks/post-commit |
| 文件变化时自动提交 | fswatch + git commit | 见脚本7 |
| CI/CD 流水线中自动管理 | GitHub Actions / GitLab CI | on: push → git tag |
| 一键批量管理多个仓库 | 脚本 + 循环 | 见脚本1 |
| 多电脑同步 | cron + 自动提交+推送 | 见脚本6 |
风险与最佳实践
- 不要全自动提交到主分支:团队项目中,自动提交会破坏代码审查流程。
- 冲突必须手动处理:自动化脚本只适合无冲突场景,有冲突时应停止并通知人工介入。
- 使用
--rebase而非--merge:避免产生多余的合并提交。 - 敏感信息不要硬编码:不要在脚本里写密码、token,使用环境变量或Git凭证管理器。
- 加日志输出:脚本里加上
echo和exit 1,方便调试和失败重试。
如果你想让我帮你写一个特定场景的自动化脚本,告诉我:
- 你用的是哪个操作系统(Linux/macOS/Windows)
- 你想自动做什么(批量更新、自动提交、多仓库同步、备份...)
- 是否涉及多人协作
我可以直接生成一个可直接运行的脚本给你。