【发布时间】:2019-03-10 07:16:50
【问题描述】:
我正在寻找一种方法来测试 本地 目录是否存在 git 存储库。
我不想只通过 sh/bash 检查.git子目录存在,但如果有,则使用专用的 git 命令。我想通过 git 命令验证该 本地 目录中可能找到的 git 存储库。
你知道任何 git 命令可以做到这一点吗?
【问题讨论】:
标签: git validation repository local working-copy
我正在寻找一种方法来测试 本地 目录是否存在 git 存储库。
我不想只通过 sh/bash 检查 .git子目录存在,但如果有,则使用专用的 git 命令。
我想通过 git 命令验证该 本地 目录中可能找到的 git 存储库。
你知道任何 git 命令可以做到这一点吗?
【问题讨论】:
标签: git validation repository local working-copy
对于第 1 项,请使用 git rev-parse --is-inside-work-tree。这个:
false;true;或fatal: not a git repository (or any parent up to... 打印到 stderr)。但是,请注意,如果您在 Git 存储库中,其工作树已被损坏或以某种方式修改,Git 将在此处打印 true。如果您传递--git-dir= 和有效存储库的路径,Git 总是 认为您在工作树中(因为您是)。如果该命令打印true 或false,则该命令的退出状态为零,如果产生错误,则为非零。
对于第 2 项——“验证”存储库——这完全取决于“验证”的含义。
【讨论】:
git rev-parse --is-bare-repository,它会打印true 或false 或错误。这在功能上与--is-inside-work-tree 相同,但更清楚地说明了您的意图。请注意,您可以在裸存储库上运行 git log。
--git-dir="<path-to-repository>" 获得正确的输出,但使用-C <path> 选项它可以工作并检测到裸/非裸存储库,如果没有存储库,它也会出错。完整命令:git -C <path-to-repository> rev-parse --is-bare-repository
--git-dir 设置将是非裸存储库的路径加上 /.git。在这里使用-C 可能会更好。