【问题标题】:git check if working copy repository exists and validate itgit 检查工作副本存储库是否存在并验证它
【发布时间】:2019-03-10 07:16:50
【问题描述】:
  1. 我正在寻找一种方法来测试 本地 目录是否存在 git 存储库。
    我不想只通过 sh/bash 检查 .git子目录存在,但如果有,则使用专用的 git 命令。

  2. 我想通过 git 命令验证该 本地 目录中可能找到的 git 存储库。

你知道任何 git 命令可以做到这一点吗?

【问题讨论】:

    标签: git validation repository local working-copy


    【解决方案1】:

    对于第 1 项,请使用 git rev-parse --is-inside-work-tree。这个:

    • 如果您在 Git 存储库中但不在其工作树中(即在裸存储库中),则打印 false
    • 如果您在具有工作树的 Git 存储库中,则打印 true;或
    • 如果您不在 Git 存储库中,则会出现错误(将 fatal: not a git repository (or any parent up to... 打印到 stderr)。

    但是,请注意,如果您在 Git 存储库中,其工作树已被损坏或以某种方式修改,Git 将在此处打印 true。如果您传递--git-dir= 和有效存储库的路径,Git 总是 认为您在工作树中(因为您是)。如果该命令打印truefalse,则该命令的退出状态为零,如果产生错误,则为非零。

    对于第 2 项——“验证”存储库——这完全取决于“验证”的含义。

    【讨论】:

    • 如果我可以提交它、签出它的分支、生成日志等,我认为在这个阶段是一个有效的本地存储库。不需要与远程存储库交换数据。
    • 要提交或签出,您需要一个工作树,因此请检查git rev-parse --is-bare-repository,它会打印truefalse 或错误。这在功能上与--is-inside-work-tree 相同,但更清楚地说明了您的意图。请注意,您可以在裸存储库上运行 git log
    • 我无法使用--git-dir="<path-to-repository>" 获得正确的输出,但使用-C <path> 选项它可以工作并检测到裸/非裸存储库,如果没有存储库,它也会出错。完整命令:git -C <path-to-repository> rev-parse --is-bare-repository
    • @Jimmix:--git-dir 设置将是非裸存储库的路径加上 /.git。在这里使用-C 可能会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多