拉取所有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时变得难以选择。这份教程提供了一个出发点,调查企业团队最常见的Git工作流。...
    JSErik阅读 4,468评论 2 8
  • 简介 什么是git? git是一款开源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快、最简...
    JonesCxy阅读 1,063评论 0 3
  • 先是大致扫了一下,cs的分布,发现cs真的是一个方向非常广的学科。
    M小生阅读 123评论 0 0
  • 新年已进入倒计时阶段,大部分人已沉浸在即将过节的喜悦中,新婚的精心准备自己的衣装,期待走亲访友时的闪亮登场...
    遥远的蓝色阅读 153评论 0 1