当我克隆一个仓库时,这两个 URL 之间有什么区别吗?
没有 .git 扩展名:
git clone http://foo/repo
带有 .git 扩展名:
git clone http://foo/repo.git
惯例上,应该将.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服务器上可能会有所不同。