将URL标识为引用git或hg存储库

时间:2014-06-25 12:02:48

标签: git mercurial protocols

我正在开发一个可以从其他各个位置导入依赖关系的构建工具。我想通过指定存储库的URL来支持导入svn,git和mercurial存储库。理想情况下,我希望能够通过检查来自服务器的响应来自动识别URL引用的存储库类型。例如,对于SVN,HTTP上的响应是具有根元素<svn>的XML文档。

是否有类似的方法可以根据HTTP响应将存储库标识为git或mercurial?通过检查标题或内容?

1 个答案:

答案 0 :(得分:2)

对于Git,服务器应在/info/refs公开端点。对于旧的(&#34; dumb&#34;)HTTP协议,这只是服务器引用的列表。新的(&#34; smart&#34;)HTTP协议将在获取时添加查询字符串(service=git-upload-pack)以指示它想要开始协商。

因此,如果您请求/info/refs?service=git-upload-pack,则应收到200响应。

dumb HTTP协议将使用文本响应进行响应,该文本响应包含引用的40个字符提交ID,后跟选项卡(\t),后跟引用名称。例如:

7334da24eda43ec5cc120b332449e82736cb6535    refs/heads/master

智能HTTP协议将以类型application/x-git-upload-pack-advertisement的响应进行响应。 git HTTP protocol documentation中描述了此响应的格式(但如果是我,我不会解析它,只是推断类型为application/x-git-upload-pack的响应是Git服务器。)