所以 基本上,我想要一个简单的方法来获取显示其状态的我的存储库列表。
然而,这个过程有点慢,令人讨厌但不是世界末日。我的脚本工作正常,但我注意到一些好奇的东西,并想知道是否有人能够澄清发生了什么。
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