为什么有些仓库的URL以.git结尾,而另一些则没有?

64
当我克隆一个仓库时,这两个 URL 之间有什么区别吗?
  1. 没有 .git 扩展名:

    git clone http://foo/repo
    
  2. 带有 .git 扩展名:

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

1
如果您正在引用 Github 的 URL,则 .git 是可选的。 - NDBoost
8
您可能对这个答案感兴趣。具体来说,“reponame.git” 命名约定通常用于裸仓库... - Roman
1个回答

52

惯例上,应该将.git扩展名用于裸仓库,并留下带有工作树的目录。 Git并不真的关心,但有一些方便的方法使这相当透明。

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

反之则不然。 如果您的目录名为/tmp/foo,并且尝试从/tmp/foo.git克隆,则会收到以下通知:

fatal: '/tmp/foo.git'不是git仓库

大多数HTTP / HTTPS功能来自您的Web服务器而不是Git。 即使您使用Smart HTTP transport,我认为大部分魔法都在服务器端的LocationMatch指令中发生。 理论上,针对GitHub的一些快速测试显示它与SSH和Git协议的工作方式相同,但在其他Web服务器上可能会有所不同。


1
我曾认为智能HTTP功能是在Git端的一个包装器,因此服务器端只需提供HTTP响应即可。但是https://github.com/blog/642-smart-http-support和http://www.kernel.org/pub/software/scm/git/docs/v1.7.3/git-http-backend.html表明我错了,它实际上是一些服务器功能。 - Philip Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接