#!/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