Git根据路径检查更改

时间:2016-10-28 21:29:52

标签: git git-diff

所以 基本上,我想要一个简单的方法来获取显示其状态的我的存储库列表。

然而,这个过程有点慢,令人讨厌但不是世界末日。我的脚本工作正常,但我注意到一些好奇的东西,并想知道是否有人能够澄清发生了什么。

status() 
{
    local OIFS="$IFS"
    IFS="|"
    local rootdir=$(pwd)
    local folders=$(find -maxdepth 2 -type d -printf "%P|")

    folders=${folders}
    for folder in $folders 
    {   
        if [[ -n $folder ]]; then
            curdir=$rootdir/$folder
            if [[ -d $curdir/.git ]]; then 
                cd "$curdir"
                #branch=$(git --git-dir="$curdir/.git" symbolic-ref -q --short HEAD 2> /dev/null)
                branch=$(git symbolic-ref --short HEAD)
                #git --git-dir="$curdir/.git" diff-index --quiet HEAD -- 
                git diff-index --quiet HEAD -- 
                case $? in
                    0) printf "\e[1;34m[Clean]\e[0m %s \e[36m(%s)\e[0m\n" "$folder" "$branch";;
                    1) printf "\e[1;31m[Dirty]\e[0m %s \e[36m(%s)\e[0m\n" "$folder" "$branch";;
                esac
            fi;
        fi;         
    }
    cd $rootdir
    IFS="$OIFS"
}

正如您所看到的那样,它非常简单,为我提供每个实际存储库的彩色输出,当前分支为1,以及本地状态的Clean / Dirty指示符。 (有没有变化)。

有趣的部分是使用" - git-dir"的注释掉的行。命令。 我当时认为不必去" cd $ curdir"对于每个文件夹只运行git命令,我记得--git-dir可用于强制存储库的位置。

对于当前分支的检索,这不是问题,但对于diff-index,它有一些奇怪的行为。

首先:如果我在没有--quiet选项的情况下运行命令,则会正确返回返回码(0或1)。但是,如果我使用--quiet它总是返回$?如果我不使用--git-dir选项,退出代码总是准确0或1,但是--git-dir选项和--quiet选项会使整个事情变得混乱。这是为什么? (真的很好奇)

至于其他事情:

A)还有另一种方法可以从diff-index获取正确的返回码,同时仍然隐藏输出并使用--git-dir功能吗?

B)有关如何加速此功能的任何想法,或者通过其他方式获取存储库的分支和提交状态等等?

由于 Jaeden" Sifo Dyas" al' Raec Ruiner

0 个答案:

没有答案