git如何知道它在git回购中的价值

git如何知道它在git回购中的价值,git,Git,我感兴趣的是git如何真正知道它在git回购中。我的第一个线索是它只是沿着文件夹结构爬到根目录(这可能涉及权限错误)。它在任何地方都有文档记录吗?Git repo是一个目录,其中包含.Git目录。Git可以向后求助,直到遇到该文件夹,或者不能再返回。就是这样。您还可以使用选项或环境变量显式地告诉它所有部件的位置 完整的文档是零碎的,您可以搜索git help git中的“discovery”,在git命令本身上找到--git dir选项,以及稍后在环境变量的文档中讨论的正常发现的确切说明,用于扩

我感兴趣的是
git
如何真正知道它在git回购中。我的第一个线索是它只是沿着文件夹结构爬到根目录(这可能涉及权限错误)。它在任何地方都有文档记录吗?

Git repo是一个目录,其中包含
.Git
目录。Git可以向后求助,直到遇到该文件夹,或者不能再返回。

就是这样。您还可以使用选项或环境变量显式地告诉它所有部件的位置

完整的文档是零碎的,您可以搜索
git help git
中的“discovery”,在
git
命令本身上找到
--git dir
选项,以及稍后在环境变量的文档中讨论的正常发现的确切说明,用于扩展该发现的范围


编辑:有两种可能的情况:您可以在工作树中启动,也可以在实际的存储库中启动(比如通常保存在工作树顶部的
.git
目录中的存储库)。我回答了“工作树内”的问题,tl;dr:是的,它会返回目录嵌套,直到找到工作树或存储库。工作树有一个
.git
,其中有一个存储库,存储库有
refs
对象
HEAD
,如答案中所述。

经验法则是git只需查找文件路径来找到一个.git目录,但事实并非如此,如果没有.git目录呢

下面是血淋淋的细节。它从搜索Git目录开始

如果设置了
GIT\u DIR
--GIT DIR
,则会使用它。否则它将从当前工作目录或
-C
给定的路径开始搜索

  • 如果有一个
    .git
    文件的第一行
    gitdir:
    它将使用该路径
  • 如果
    .git/
    (非裸存储库)是git目录,它将使用该目录
  • 如果
    /
    (一个裸存储库)是一个Git目录,它将使用该目录
  • 向上移动目录并重新启动,除非。。。
  • 它已命中任何
    GIT\u目录
  • GIT\u DISCOVERY\u跨文件系统
    是不正确的,它已到达文件系统边界
  • 如果所有这些都是真的,那么它就是一个Git目录

  • HEAD
    包含语法上有效的引用
  • 有一个可访问的
    objects
    目录,或者设置为GIT\u OBJECT\u的任何目录
  • 有一个可访问的
    refs
    目录
  • 如果它是一个Git目录,并且其父目录是
    .Git

    下面是让Git相信它已经找到“Git目录”的最低要求

    可访问的
    对象
    引用
    目录,以及具有语法有效引用的头文件


    如果它位于
    .git
    目录中,那么它是一个非裸存储库。

    裸回购如何?@EdwardThomson问得好。链接:Yarrr,blockos!这就像是在block land的海盗日@torek Appypolly loggies。这就是你的小马,它会和任何切普卡参考兔子。啊哈。永远不要读那本书(避免读它和基于极端暴力报道的电影,这不符合我的口味),但也许我还是应该读它。
    $ ls -lR
    .:
    total 4
    -rw-r--r-- 1 schwern staff 27 Dec 29 14:50 HEAD
    dr-xr-xr-x 2 schwern staff 64 Dec 29 14:50 objects
    drwxr-xr-x 2 schwern staff 64 Dec 29 14:50 refs
    
    ./objects:
    total 0
    
    ./refs:
    total 0
    
    $ cat HEAD 
    ref: refs/heads/yarblockos