12

我注意到当一个 git (html) 项目页面像这样:

https://github.com/fruux/sabre-dav

被克隆,以这种方式:

git clone https://github.com/fruux/sabre-dav .

列出的实际生成的远程 urlgit remote -v是这样的 url:

origin  git@github.com:foo/sabre-dav.git

大概是因为我有推送访问权限。

所以这让我想知道是否可以将任何给定的项目 url 重定向到 git 存储库。例如,如果我拥有http://myosproject.example.org,是否可以允许git clone http://myosproject.example.org并让它实际上以某种方式重定向到 github 项目。

4

2 回答 2

7

只要裸 git(.git文件夹)在 web serversDocumentRoot中,并且你设置了一个特定的post-update钩子,它就可以工作。

有关此内容的更多信息,请参阅本书章节

要将自己的域名映射到 a ,github URL我认为您只需要在您的ACNAMEDNS

也可以在您的 Web 服务器中配置反向代理来传递对http://my.domain.com/projectto的请求http://github.com/project

于 2013-10-17T18:47:00.970 回答
2

例如,如果我拥有http://myosproject.example.org,是否可以允许 git clone http://myosproject.example.org并让它实际上以某种方式重定向到 GitHub 项目

如果服务器知道以某种方式重定向 url,理论上是可能的。
Git now (2.12, Q1 2017)http-alternates像重定向一样对待。

请参阅Jeff King ( )的提交 cb4d2d3提交 50d3413提交 fcaa6e6提交 6628eb4提交 986d7f4(2016 年 12 月 6 日) 。(由Junio C Hamano 合并 -- --8a2882f 提交中,2016 年 12 月 19 日)peff
gitster

服务器还有另一种方法可以让 git 客户端获取任意内容:使用 http-alternates 文件(或用作备份的常规替代文件)。

  • 除非http.followRedirects设置为“always”,否则我们根本不会遵循来自 http-alternates(或alternate)的远程重定向
  • CURLOPT_PROTOCOLS自己CURLOPT_REDIR_PROTOCOLS限制在已知安全的集合中,并尊重任何用户提供的白名单。
  • 在 stderr 上提及备用对象存储,以便用户知道可能涉及另一个对象来源。

Git 2.13 通过仅在没有错误的情况下更新基本 URL 来改进这些 http 重定向

请参阅Jonathan Tan ( )的提交 8e27391(2017 年 2 月 28 日) 。(由Junio C Hamano 合并 -- --d0f549f 提交中,2017 年 3 月 10 日)jhowtan
gitster

http.c支持表单的 HTTP 重定向

 http://foo/info/refs?service=git-upload-pack
 -> http://anything
 -> http://bar/info/refs?service=git-upload-pack

也就是说,只要Git部分的路径和查询字符串保存在最终的重定向目的地,中间步骤可以有任意的URL。
但是,如果其中一个中间步骤导致 HTTP 异常,unable to update url base from redirection则会打印一条令人困惑的“”消息,而不是带有 HTTP 异常代码的 Curl 错误消息。

教导http检查 HTTP 状态,然后再尝试检查 URL 的“基本”部分是否不同。


但是,正如xpt的问题“git clone来自重定向缩短网址”中所述:

git clonehttpfollowRedirects如果不是,则应遵循重定向false
实际上,以 301 结尾的 URL,.git以及已重命名的 repos 的旧 URL。

所以301 ("Moved Permanent")而不是 302 ("Found"),例如被git.io使用。

于 2016-12-23T20:24:06.247 回答