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跨文件系统
是不正确的,它已到达文件系统边界HEAD
包含语法上有效的引用objects
目录,或者设置为GIT\u OBJECT\u的任何目录refs
目录.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