当某个目录不是当前工作目录时,如何检查该目录是否在 git 工作树中?

当某个目录不是当前工作目录时,如何检查该目录是否在 git 工作树中?

我可以测试当前目录是否像这样:

[[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && echo yes

..但是我如何对不是当前工作目录的目录执行相同的操作?

答案1

只需使用-C全局选项git。这样做,并简化您的代码(为什么要解析输出以重建直接编码在返回状态中的信息?):

directory=. # or wherever
if git -C "$directory" rev-parse --is-inside-work-tree >/dev/null 2>/dev/null; then
  echo yes
fi

答案2

我怀疑最简单的选择是暂时更改到目录:

(cd /path/to/target && [[ $(git rev-parse --is-inside-work-tree) == true ]]) 2> /dev/null && echo yes

答案3

我将使用一个移动到目标目录的函数来完成此操作,在那里运行命令并返回结果:

isGitDIr(){
    for dir in "$@"; do
    ( 
        cd "$dir" || return
        [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == true ]] && 
        echo "yes"
    )
    done
}

括号使命令在子 shell 中运行,这样当函数完成时,您就不会更改父 shell 的目录。将这些行添加到 shell 的初始化文件(例如~/.bashrc)或直接粘贴到终端中,您可以执行以下操作:

isGitDIr /path

相关内容