59

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

  1. 没有 .git 扩展名:

    git clone http://foo/repo
    
  2. 使用 .git 扩展名:

    git clone http://foo/repo.git
    
4

1 回答 1

49

约定是.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。即使您使用的是Smart HTTP transport,我怀疑大多数魔法都发生在服务器端 LocationMatch 指令中。抛开理论不谈,针对 GitHub 的一些快速测试表明它在这方面与 SSH 和 Git 协议的工作方式相同,但您的里程可能在其他 Web 服务器上有所不同。

于 2012-06-17T06:40:20.367 回答