从 GitHub 克隆时,Git 不需要 .git 扩展名.这是 Git 还是 GitHub 的一个功能



我注意到,从 GitHub 克隆存储库时,末尾缺少.git扩展名的 URL 仍将正确克隆。

例如,此命令:

git clone https://github.com/kach/nearley

将与此地址相同的功能:

git clone https://github.com/kach/nearley.git

此功能是由 Git 命令提供的,还是由服务器端的 GitHub 处理的?如果这是GitHub的一个功能,他们会在任何地方记录吗?

关于他们如何或为何实施这一点的任何说明也将不胜感激。

.git扩展表示一个裸存储库。什么是裸存储库?

Git 似乎并不关心您是否不为以这种方式命名的存储库提供 .git 扩展名,但如果您确实提供了它并且存储库没有该扩展名,您的克隆将失败。因此,似乎专门提供此功能的是 Git 而不是 Github。

有关更多评论,请参阅此其他问题。

还有 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-upload-pack

GitHub 实际上并没有在该 URL 上提供"智能 HTTP"git 传输协议,而是在名称中带有 .git 的变体中提供它:https://github.com/example/path.git/info/refs?service=git-upload-pack 。但是,作为特殊例外,如果用户代理标头包含 git/ ,GitHub 将通过回复 Content-Type: application/x-git-upload-pack-advertisement 来提供智能 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

你可以跳过 .git,git 是一个版本控制系统,通常知道如何仅从其名称(不带".git"(找到完整的存储库路径。例如,golang语言的goget github.com/username/reponame 命令:即使没有扩展,它也会克隆该存储库。这里是参考。

有关更多评论,请参阅此其他问题。

> 正如@Matt所指出的,git 似乎并不在乎。但是,它似乎由客户端处理,而其他客户端库(如JGit(似乎确实关心。我花了将近一个小时才知道为什么我的 Spring 配置服务器会在启动时抛出此异常:

NoRemoteRepositoryException: ... <some-repo-url>/git-upload-pack not found

具有相同 URL 的git clone运行良好。这只是在spring.cloud.config.server下配置的存储库 URL 中缺少的 .git 后缀 - 我太习惯于省略它了。

相关内容

  • 没有找到相关文章