Linux git使用什么机制来查找其存储库?

Linux git使用什么机制来查找其存储库?,linux,git,Linux,Git,我有几个git存储库。其中一个在$PATH中。今天,我不小心移动到了一个我以为有git存储库但没有的目录 cd 因此,当我输入git状态时,输出是混乱的 git似乎在$PATH中找到了存储库,因此在本例中,git在~/bin中找到了存储库,它位于我的路径中 git是通过查找$PATH来搜索存储库,还是有其他搜索机制在起作用?我找不到关于实际细节的确切参考,但我们可以从中推断出大部分信息 Git按优先顺序在存储库中查找其位置: 在--git dir参数提供的目录中 在由GIT\u DIR环境变量

我有几个git存储库。其中一个在$PATH中。今天,我不小心移动到了一个我以为有git存储库但没有的目录

cd

因此,当我输入git状态时,输出是混乱的

git似乎在$PATH中找到了存储库,因此在本例中,git在~/bin中找到了存储库,它位于我的路径中


git是通过查找$PATH来搜索存储库,还是有其他搜索机制在起作用?

我找不到关于实际细节的确切参考,但我们可以从中推断出大部分信息

Git按优先顺序在存储库中查找其位置:

  • --git dir
    参数提供的目录中

  • 在由
    GIT\u DIR
    环境变量提供的目录中

  • 在子目录
    .git
    或当前目录中

  • 在祖先目录的子目录
    .git
    中。环境变量
    GIT\u目录
    和跨文件系统的
    GIT\u发现
    设置了一些约束条件


我找不到确切的参考资料,但我们可以从中推断出大部分细节

Git按优先顺序在存储库中查找其位置:

  • --git dir
    参数提供的目录中

  • 在由
    GIT\u DIR
    环境变量提供的目录中

  • 在子目录
    .git
    或当前目录中

  • 在祖先目录的子目录
    .git
    中。环境变量
    GIT\u目录
    和跨文件系统的
    GIT\u发现
    设置了一些约束条件

根据,Git在查找其对象存储时如下所示:

  • 如果指定了“-git dir”命令行选项,则其值将用于定位存储库

  • 如果
    GIT_DIR
    环境变量可用并设置其值,则使用该变量来定位存储库

    请注意,在这两种情况下均未进行搜索/启发式

  • 否则Git会试图确定当前目录是否是存储库,以防它是一个没有工作树的裸存储库

    解释了它用于执行此任务的逻辑。举个例子:

    测试我们是否在git目录下。 我们希望看到:

    - either an objects/ directory _or_ the proper
      GIT_OBJECT_DIRECTORY environment variable
    - a refs/ directory
    - either a HEAD symlink or a HEAD file that is formatted as
      a proper "ref:", or a regular file HEAD that has a properly
      formatted sha1 object name.
    
  • 否则,Git将尝试在当前目录中查找名为“.Git”的目录

    如果成功,它将使用上一步中的测试来验证它是否真的是它想要的

  • 如果失败,它将上升一级-到父目录并重试

    最后两个步骤将一直执行,直到POSIX类系统上的
    /
    或Windows上驱动器的根被击中为止(因此无需提升)。默认情况下,Git也不会跨越当前目录的文件系统边界

  • 如您所见,不涉及任何
    $PATH
    :此目录仅用于查找可执行程序,Git与之无关。

    根据,Git在查找其对象存储时如下所示:

  • 如果指定了“-git dir”命令行选项,则其值将用于定位存储库

  • 如果
    GIT_DIR
    环境变量可用并设置其值,则使用该变量来定位存储库

    请注意,在这两种情况下均未进行搜索/启发式

  • 否则Git会试图确定当前目录是否是存储库,以防它是一个没有工作树的裸存储库

    解释了它用于执行此任务的逻辑。举个例子:

    测试我们是否在git目录下。 我们希望看到:

    - either an objects/ directory _or_ the proper
      GIT_OBJECT_DIRECTORY environment variable
    - a refs/ directory
    - either a HEAD symlink or a HEAD file that is formatted as
      a proper "ref:", or a regular file HEAD that has a properly
      formatted sha1 object name.
    
  • 否则,Git将尝试在当前目录中查找名为“.Git”的目录

    如果成功,它将使用上一步中的测试来验证它是否真的是它想要的

  • 如果失败,它将上升一级-到父目录并重试

    最后两个步骤将一直执行,直到POSIX类系统上的
    /
    或Windows上驱动器的根被击中为止(因此无需提升)。默认情况下,Git也不会跨越当前目录的文件系统边界


  • 正如您所看到的,不涉及任何
    $PATH
    :此目录仅用于查找可执行程序,Git与之无关。

    它会上升一个级别,直到找到一个.Git,否则它将无法上升。它与$PATH无关。
    git
    不使用
    $PATH
    查找存储库,但它确实有方法。在这里复制有点太长,但是在git手册页中查找“环境变量”。从GIT_开始搜索您自己的环境中的变量可能会更快。这些看起来像是我的答案,所以希望您能回答这篇文章。谢谢。好吧,如果你坚持的话……它会上升一个级别直到找到一个.git,否则它就没有级别了。它与$PATH无关。
    git
    不使用
    $PATH
    查找存储库,但它确实有方法。在这里复制有点太长,但是在git手册页中查找“环境变量”。从GIT_开始搜索您自己的环境中的变量可能会更快。这些看起来像是我的答案,所以希望您能回答这篇文章。谢谢。如果你坚持的话。。。