我希望有人能够回答GIT智能HTTP协议的服务器端和客户端之间的细节差异。
最好的方法是提供一些参考书&提前代码。
libgit2已经公开了一个packbuilder。但是,您必须自己实现服务器端协议。
我们可以用libgit2sharp(或libgit2)用小代码实现服务器端吗?
遵循上述问题。我们可以使用带有git.exe receive-pack
参数的git.exe upload-pack
和--stateless-rpc
命令处理pack。实施的代码为here和here。
我们可以将上面的代码编译为.Net程序集中的本机代码吗?即使我们可以通过管道连接ASP.NET流和git.exe,但这不是一个好方法。
答案 0 :(得分:1)
如果您只是在寻找与GIT交互的.NET库,请尝试GitSharp或nGit。 source 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在上述方法中有一个很好的例子。