GIT智能HTTP协议的服务器端和客户端之间有什么细节区别

时间:2013-05-20 13:49:54

标签: c# git libgit2 libgit2sharp smart-http

我希望有人能够回答GIT智能HTTP协议的服务器端和客户端之间的细节差异。

最好的方法是提供一些参考书&提前代码。


有人说,

  

libgit2已经公开了一个packbuilder。但是,您必须自己实现服务器端协议。

reference to this link

我们可以用libgit2sharp(或libgit2)用小代码实现服务器端吗?


遵循上述问题。我们可以使用带有git.exe receive-pack参数的git.exe upload-pack--stateless-rpc命令处理pack。实施的代码为herehere

我们可以将上面的代码编译为.Net程序集中的本机代码吗?即使我们可以通过管道连接ASP.NET流和git.exe,但这不是一个好方法。

1 个答案:

答案 0 :(得分:1)

如果您只是在寻找与GIT交互的.NET库,请尝试GitSharpnGitsource code for GitSharp也可能很有用,因为您似乎是c#开发人员而GitSharp不是自动端口。否则:

(如上面的评论所示),没有很多关于此协议的易于查找的文档。幸运的是,Git使协议的逆向工程变得容易,并且不应该太困难。

较新的Smart-Git协议现在为旧服务器将忽略的GET http请求添加了另一个参数(早于1.6.6),并将导致更新的服务器切换到多帖模式。此时较新的服务器为客户端构建自定义包文件,仅包含客户端所需的文件。

为了对协议部分期间发生的事情进行反向工程,您可以使用环境变量:

SET GIT_CURL_VERBOSE=1

启用此选项后,Git将为其发出的每个调用输出HTTP请求和标头,并且还将为每个响应输出HTTP状态代码和响应标头。您还可以使用Fiddler之类的工具查看正在发生的所有http流量。为此,您必须使用第二个Git环境变量来强制GIT通过http代理:

SET HTTP_PROXY=http://localhost:8888

此时您基本上开始发布Git命令并监控http流量。

例如执行" git push -u origin master"

返回:

GET http://localhost:8000/gitserver/git/info/refs?service=git-receive-pack

This blog entry在上述方法中有一个很好的例子。