有没有一个可以使用完整目录路径来确定给定目录是否为git仓库的shell命令?具体来说,我想在不进入目录的情况下进行此操作,并且不需要使用cd命令。我还希望能够使用一个返回简单的"true"或"false"的命令(就像rev-parse --is-inside-work-tree一样),但这不是必需的。
git -C <path> rev-parse 2>/dev/null
命令。该命令可使脚本更简洁易读,并返回解析路径下的Git版本信息。 - daparicgit -C $REPO_DIR rev-parse 2>/dev/null
exit_code=$(echo $?)
if [ "$exit_code" -ne 0 ] ; then echo "$REPO_DIR 不是一个 git 仓库" fi
- JBSnorroif [ "$?" -ne 0 ] ;
吗? - ypnos我们还可以尝试使用 git status
命令,如果输出如下:
fatal: Not a git repository (or any of the parent directories): .git
那么该目录不是一个Git仓库。
补充@Walk的评论,如果不是一个仓库,git status
会抛出致命错误信息。echo $?
将有助于捕获其是否为ERROR。如果它是一个git仓库,那么echo $?
将为0,否则值为128。
git rev-parse --is-inside-work-tree
(如果需要,也可以使用适当的-C
)来检查这是否是一个“工作树”。这可以让您区分“工作树”和“裸仓库”两种情况:$ git -C .git rev-parse && echo $?
0
$ git -C .git rev-parse --is-inside-work-tree && echo $?
false
0
一如既往地,要注意如果您完全不在Git目录中,则会出现错误:
$ git -C / rev-parse --is-inside-work-tree
fatal: not a git repository (or any of the parent directories): .git
你可能想要丢弃的内容(git ... 2>/dev/null
)。由于--is-inside-work-tree
会打印true
或false
,所以你需要捕获或测试stdout。
git status
并检查退出代码echo $?
。除了0以外的任何内容都会告诉您不在git存储库中。
[[ -d "$PATH/.git" ]] && <其他命令>
- hjpotter92.git
检查之外测试git
命令的错误代码。 - Siguzaa
是一个git存储库,a/b/.git
存在,并且测试a/b
是否为git存储库将返回true。但是,您可以通过首先检查父目录来减轻此情况。 - Siguza