#!/bin/bash
# -----------------------------------------------------------------------------
# Script Name : __git_pull.sh
# Version : v1.1
#
# Description :
# 批量扫描当前脚本所在目录下的所有 Git 仓库,并执行以下操作:
#
# 1. 自动识别包含 .git 目录的子目录(作为 Git 仓库)
# 2. 执行 `git fetch --all --prune`
# - 拉取所有远程分支(包括新分支)
# - 删除远程已不存在的分支引用
# 3. 执行 `git pull --ff-only`
# - 更新当前分支到最新
# - 仅允许 fast-forward,避免自动 merge
# 4. 输出当前仓库的所有远程分支(不进入分页模式)
#
# Usage :
# 将脚本放在多个 Git 仓库的父目录下执行:
# ./__git_pull.sh
#
# Notes :
# - 不会自动 checkout 或创建本地分支
# - 不会处理未提交代码(可能导致 pull 失败)
# - 若仓库较多,执行时间取决于网络和仓库大小
#
# Author :
# me
# -----------------------------------------------------------------------------
echo start on $(date "+%Y-%m-%d %H:%M:%S")
shell_directory=$(cd `dirname $0`; pwd)
echo "shell directory is $shell_directory"
echo "filename is $0"
for dir in "${shell_directory}"/*
do
if [ -d "$dir/.git" ]; then
echo "================================="
echo "repo: $dir"
cd "$dir"
current_branch=$(git rev-parse --abbrev-ref HEAD)
echo "current branch: $current_branch"
# 1. 获取所有远程分支(包括新分支)
git fetch --all --prune
# 2. 更新当前分支
git pull --ff-only
# 3. 展示远程分支(可选)
echo "remote branches:"
git --no-pager branch -r
echo "done: $dir"
fi
done作者:张三 创建时间:2026-03-24 10:00
最后编辑:张三 更新时间:2026-03-24 10:03
最后编辑:张三 更新时间:2026-03-24 10:03