检查目录是否是git存储库(不需要cd到它)



我可以使用什么shell命令,使用完整目录路径,确定给定目录是否是git存储库?具体来说,我希望能够做到这一点,而不需要在目录中,而不必cd到它。我还希望能够使用返回简单的"true"或"false"的命令来完成它(就像rev-parse——is-inside-work-tree所做的那样),但这不是必需的。

使用git -C <path> rev-parse。如果<path>的目录是git存储库,则返回0,否则返回错误代码。

进一步阅读:

  • rev-parse
  • -C <path>

我们也可以尝试git status命令,如果输出如下:

fatal: Not a git repository (or any of the parent directories): .git

系统中的任何目录都可以是git的工作副本。通过将GIT_DIRGIT_WORK_TREE环境变量设置为指向实际的.git目录和工作副本的根目录,您可以像使用.git子目录一样使用目录,或者使用--git-dir--work-tree选项。

添加到@Walk的注释,如果不是回购,git status将抛出致命消息。echo $?将帮助捕获其是否为ERROR。如果是git repo,那么echo $?将为0,否则128将为

在这里也考虑git rev-parse --is-inside-work-tree(如果需要的话,首先考虑适当的-C)来检查这是否是一个工作树。这允许您区分"工作树"one_answers"工作树"。和"裸存储库";例:

$ 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打印truefalse,您将需要捕获或测试stdout

在unix/linux系统下,可以执行git status命令查看退出码echo $?

相关内容

最新更新