为什么某些存储库URL以.git结尾而其他存储库URL不以?

use*_*949 40 git url github git-clone

当我克隆存储库时,这两个URL之间有什么区别吗?

  1. 没有.git扩展名:

    git clone http://foo/repo
    
    Run Code Online (Sandbox Code Playgroud)
  2. 扩展名为.git:

    git clone http://foo/repo.git
    
    Run Code Online (Sandbox Code Playgroud)

Tod*_*obs 38

惯例是.git扩展名应该用于裸存储库,并且不带有工作树的目录.Git并不在乎,但有一些方便的方法可以使它相当透明.

例如,如果您有一个名为/tmp/foo.git的存储库并且您调用git clone file:///tmp/foo,Git将首先尝试查找/ tmp/foo.如果它不存在,它将尝试/tmp/foo.git.

这并没有解决的其他方式.如果您的目录名为/ tmp/foo,并且您尝试从/tmp/foo.git克隆,则会被告知:

致命:'/ tmp/foo.git'似乎不是一个git存储库

大多数HTTP/HTTPS功能来自您的Web服务器,而不是Git.即使你正在使用智能HTTP传输,我怀疑大多数魔法发生在服务器端的LocationMatch指令中.除了理论之外,对GitHub的一些快速测试显示它在这方面的工作方式与SSH和Git协议相同,但您的里程可能因其他网络服务器而异.