我可以使用什么shell命令来使用完整的目录路径来确定给定的目录是否是git仓库?具体来说,我希望能够在不位于目录中的情况下执行此操作,并且不必将cd放入其中。我还希望能够使用一个返回简单的“true”或“false”的命令来实现这一点(与rev-parse --is-inside-work-tree的方式非常相似),但这不是必需的。
yuvru6vn1#
使用git -C <path> rev-parse。如果<path>的目录是git仓库,则返回0,否则返回错误代码。
git -C <path> rev-parse
<path>
进一步阅读:
rev-parse
-C <path>
omhiaaxx2#
我们也可以尝试git status命令,如果输出如下:fatal: Not a git repository (or any of the parent directories): .git那么,这个目录就不是一个git仓库。
git status
fatal: Not a git repository (or any of the parent directories): .git
rkkpypqq3#
系统中的任何目录都可以是git工作副本。您可以通过设置GIT_DIR和GIT_WORK_TREE环境变量来指向实际的.git目录和工作副本的根目录,或者使用--git-dir和--work-tree选项来使用目录,就像它包含.git子目录一样。查看git手册页了解更多细节。
GIT_DIR
GIT_WORK_TREE
.git
--git-dir
--work-tree
8aqjt8rx4#
添加到@Walk的评论中,如果git status不是repo,它将抛出致命消息。echo $?将有助于捕获其错误与否。如果是git repo,那么echo $?将为0,否则值将为128
echo $?
23c0lvtd5#
这里也考虑git rev-parse --is-inside-work-tree(如果需要,也可以先考虑适当的-C),以检查这是否是一个 * 工作树 *。这允许您区分“工作树”和“裸存储库”的情况:
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 ... 2>/dev/null
--is-inside-work-tree
true
false
d5vmydt96#
在unix/Linux系统中,可以运行git status并检查退出代码echo $?。任何不为0的值都表示您不在git repo中
6条答案
按热度按时间yuvru6vn1#
使用
git -C <path> rev-parse
。如果<path>
的目录是git仓库,则返回0,否则返回错误代码。进一步阅读:
rev-parse
-C <path>
omhiaaxx2#
我们也可以尝试
git status
命令,如果输出如下:fatal: Not a git repository (or any of the parent directories): .git
那么,这个目录就不是一个git仓库。
rkkpypqq3#
系统中的任何目录都可以是git工作副本。您可以通过设置
GIT_DIR
和GIT_WORK_TREE
环境变量来指向实际的.git
目录和工作副本的根目录,或者使用--git-dir
和--work-tree
选项来使用目录,就像它包含.git
子目录一样。查看git手册页了解更多细节。8aqjt8rx4#
添加到@Walk的评论中,如果
git status
不是repo,它将抛出致命消息。echo $?
将有助于捕获其错误与否。如果是git repo,那么echo $?
将为0,否则值将为12823c0lvtd5#
这里也考虑
git rev-parse --is-inside-work-tree
(如果需要,也可以先考虑适当的-C
),以检查这是否是一个 * 工作树 *。这允许您区分“工作树”和“裸存储库”的情况:和往常一样,请注意,如果你根本不在Git目录中,你会得到一个错误:
您可能希望丢弃(
git ... 2>/dev/null
)。由于--is-inside-work-tree
打印true
或false
,因此需要捕获或测试stdout。d5vmydt96#
在unix/Linux系统中,可以运行
git status
并检查退出代码echo $?
。任何不为0的值都表示您不在git repo中