我可以使用什么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_DIR
和GIT_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
打印true
或false
,您将需要捕获或测试stdout
在unix/linux系统下,可以执行git status
命令查看退出码echo $?
。