【问题标题】:Check if directory is git repository (without having to cd into it)检查目录是否为 git 存储库(无需 cd 进入)
【发布时间】:2017-01-23 21:27:20
【问题描述】:

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

【问题讨论】:

  • test -d "$path/.git"
  • 还有[[ -d "$PATH/.git" ]] && <other commands>
  • 你可以 grep 获取 .git 文件夹吗?或者你可以 cd 进入它然后检查然后 cd 回到当前工作目录?
  • @Siguza 我认为这是一种解决方案,但是如果该目录实际上不是一个 git 存储库,而只是包含一个名为 .git 的目录呢? (例如 .git 不包含 ORIG_HEAD、FETCH_HEAD 等)
  • @Ataraxia 然后我会考虑一个 broken git 存储库......但这是一个见仁见智的问题。如果您只想要完整/“有效”的 git 存储库,除了 .git 检查之外,您最好测试 git 命令的错误代码。

标签: linux git bash


【解决方案1】:

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

进一步阅读

【讨论】:

  • 注意:对于 git 存储库的任何子目录,这也将返回 0。
  • 太棒了!谢谢!!
  • git -C <path> rev-parse 2>/dev/null 用于更简洁的脚本集成
  • 补充答案和cmets:git -C $REPO_DIR rev-parse 2>/dev/nullexit_code=$(echo $?)if [ "$exit_code" -ne 0 ] ; then echo "$REPO_DIR is not a git repository" fi
  • @JBSnorro 我讨厌 bash,但我想知道,你能不能也简单地写 if [ "$?" -ne 0 ] ;
【解决方案2】:

我们也可以试试git status 命令,如果输出是这样的:

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

那么,这个目录就不是git仓库了。

【讨论】:

    【解决方案3】:

    系统中的任何目录都可以是 git 工作副本。您可以通过将GIT_DIRGIT_WORK_TREE 环境变量设置为指向实际的.git 目录和工作副本的根目录来使用目录,就好像它包含.git 子目录一样,或者使用--git-dir--work-tree 选项。有关详细信息,请参阅git man page

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2011-01-11
        • 2020-11-05
        • 1970-01-01
        • 2016-04-03
        • 2020-02-05
        • 2014-04-22
        • 2016-08-08
        • 1970-01-01
        • 2015-12-01
        相关资源
        最近更新 更多