检查目录是否是git仓库(无需cd到其中)

tzxcd3kk  于 2023-09-29  发布在  Git
关注(0)|答案(6)|浏览(156)

我可以使用什么shell命令来使用完整的目录路径来确定给定的目录是否是git仓库?具体来说,我希望能够在不位于目录中的情况下执行此操作,并且不必将cd放入其中。我还希望能够使用一个返回简单的“true”或“false”的命令来实现这一点(与rev-parse --is-inside-work-tree的方式非常相似),但这不是必需的。

yuvru6vn

yuvru6vn1#

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

进一步阅读

omhiaaxx

omhiaaxx2#

我们也可以尝试git status命令,如果输出如下:
fatal: Not a git repository (or any of the parent directories): .git
那么,这个目录就不是一个git仓库。

rkkpypqq

rkkpypqq3#

系统中的任何目录都可以是git工作副本。您可以通过设置GIT_DIRGIT_WORK_TREE环境变量来指向实际的.git目录和工作副本的根目录,或者使用--git-dir--work-tree选项来使用目录,就像它包含.git子目录一样。查看git手册页了解更多细节。

8aqjt8rx

8aqjt8rx4#

添加到@Walk的评论中,如果git status不是repo,它将抛出致命消息。echo $?将有助于捕获其错误与否。如果是git repo,那么echo $?将为0,否则值将为128

23c0lvtd

23c0lvtd5#

这里也考虑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打印truefalse,因此需要捕获或测试stdout。

d5vmydt9

d5vmydt96#

在unix/Linux系统中,可以运行git status并检查退出代码echo $?。任何不为0的值都表示您不在git repo中

相关问题