拉取所有git仓库

随着代码越写越多。本地保存的git仓库也越来越多,有些是私有项目,有些是公开项目。其中也有很多是访问不多,本地做备份保存的仓库。说这么多废话,主要是遇到一个需要把本地代码运行git pull同步远端仓库代码。一个一个文件夹cd实在是太麻烦了。

#!/bin/bash
while getopts "Pp:" arg #选项后面的冒号表示该选项需要参数
do
    case $arg in
        P)
            export HTTP_PROXY=http://127.0.0.1:1234
            export HTTPS_PROXY=http://127.0.0.1:1234
            ;;
        p)
            # echo "a's arg:$OPTARG" #参数存在$OPTARG中
            export HTTP_PROXY=$OPTARG
            export HTTPS_PROXY=$OPTARG
            ;;
        ?)  #当有不认识的选项的时候arg为?
    echo -e '\033[31m参数列表:
-P  设置代理:HTTP_PROXY=http://127.0.0.1: 1234
    HTTPS_PROXY=http://127.0.0.1: 1234

-p  指定代理,比如:-p http://127.0.0.1: 1234
\033[0m'
            exit 1
        ;;
    esac
done
shift $((OPTIND-1))
args=( "$@" )
if [ ! -n "$1" ] ;then
    # 没有指定目录,设置为当前目录。
    args='.'
fi

for arg in "${args[@]}"
do
    if [ -n "$arg" ]; then
        if [ -d "$arg" ]; then
            path=$arg
        else
            echo -e "\033[31m'$arg'必须是目录,可以不加参数则默认处理当前目录\033[0m"
            exit 1
        fi
    else
        # path=$(dirname $0)
        path=$(pwd)
    fi
    cd "$path" || continue
    # 处理当前页面是否有git
    if [[ -d ./.git ]]
        then
            echo "pulling $(basename $path)"
            git pull
    fi
    # 其实理论上上面当前目录是git仓库了,这里是不需要再处理了。
    parent_dir=$(ls .)
    for dir in $parent_dir
    do
        if [[ -d $dir/.git ]]
        then
            echo "pulling $(basename $dir)"
            cd "$dir" || continue
            git pull
            cd ..
        fi
    done
done

你可能感兴趣的:(拉取所有git仓库)