我正在开发一个可以从其他各个位置导入依赖关系的构建工具。我想通过指定存储库的URL来支持导入svn,git和mercurial存储库。理想情况下,我希望能够通过检查来自服务器的响应来自动识别URL引用的存储库类型。例如,对于SVN,HTTP上的响应是具有根元素<svn>
的XML文档。
是否有类似的方法可以根据HTTP响应将存储库标识为git或mercurial?通过检查标题或内容?
答案 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服务器。)