从GitHub克隆时,Git不需要.Git扩展名。这是Git的特性还是GitHub的特性?

从GitHub克隆时,Git不需要.Git扩展名。这是Git的特性还是GitHub的特性?,git,http,github,Git,Http,Github,我注意到,在从GitHub克隆repo时,如果URL末尾缺少.git扩展名,则仍然可以正确克隆 例如,这个命令: git clone https://github.com/kach/nearley 其功能与此地址相同: git clone https://github.com/kach/nearley.git 这个功能是由Git命令提供的还是由服务器端的GitHub处理的?如果这是GitHub的一个功能,他们会在任何地方记录它吗 另外,如果您能说明他们是如何或为什么实现此功能的,我们将不胜感

我注意到,在从GitHub克隆repo时,如果URL末尾缺少
.git
扩展名,则仍然可以正确克隆

例如,这个命令:

git clone https://github.com/kach/nearley
其功能与此地址相同:

git clone https://github.com/kach/nearley.git
这个功能是由Git命令提供的还是由服务器端的GitHub处理的?如果这是GitHub的一个功能,他们会在任何地方记录它吗


另外,如果您能说明他们是如何或为什么实现此功能的,我们将不胜感激。

git扩展表示存储库是空的

Git似乎并不关心您是否为以这种方式命名的存储库提供了
.Git
扩展,但是如果您提供了扩展,并且存储库没有该扩展,那么克隆将失败。因此,似乎是Git而不是Github提供了这个特性

更多的评论请参见此


和。

您可以跳过.git,git是一个版本控制系统,通常知道如何仅从其名称(不带“.git”)找到完整的存储库路径。 例如,go-get-github.com/username/reponame命令(go-get-github.com/username/reponame):它将克隆该repo,即使没有扩展名。参考资料


更多的评论请参见本文。

正如@Matt所指出的,git似乎并不在意。然而,它似乎是由客户机处理的,而像JGit这样的其他客户机库似乎也很关心。我花了将近一个小时才找到为什么我的Spring配置服务器在启动时会抛出这个异常:

NoRemoteRepositoryException:/找不到git上载包


git clone
使用相同的URL运行得非常好。这仅仅是在
spring.cloud.config.server
下配置的存储库URL中缺少了.git后缀-我习惯于忽略它。

这是GitHub的一个功能。当您运行git clone时https://github.com/example/path,git会自动附加
/info/refs?service=git upload pack
并获取
https://github.com/example/path/info/refs?service=git-上传软件包

GitHub实际上并没有在该URL上提供“智能HTTP”git传输协议,而是在名称为“
https://github.com/example/path.git/info/refs?service=git-上传软件包
。但是,作为特殊例外,如果用户代理头包含
git/
,GitHub将通过回复
内容类型:application/x-git-upload-pack-advision
来提供智能HTTP传输协议。你自己试试卷发:

$ curl https://github.com/jsha/minica/info/refs?service=git-upload-pack -si | head
HTTP/1.1 404 Not Found

$ curl https://github.com/jsha/minica/info/refs?service=git-upload-pack -si -H 'User-Agent: git/1.0'
HTTP/1.1 200 OK
Server: GitHub Babel 2.0
Content-Type: application/x-git-upload-pack-advertisement
...
001e# service=git-upload-pack