[英]What details difference between server side and client of GIT smart HTTP protocol
我希望有人能够回答GIT智能HTTP协议的服务器端和客户端之间的细节差异。
最好的方法是提供一些推荐的参考书和代码。
有人说,
libgit2已经公开了一个packbuilder。 但是,您必须自己实现服务器端协议。
我们可以用libgit2sharp(或libgit2)用小代码实现服务器端吗?
按照上面的问题。 我们可以使用--stateless-rpc
参数处理包含git.exe receive-pack
和git.exe upload-pack
命令git.exe upload-pack
。 实现的代码在这里和这里 。
我们可以将上面的代码编译为.Net程序集中的本机代码吗? 即使我们可以通过管道连接ASP.NET流和git.exe,但这不是一个好方法。
如果您只是在寻找与GIT交互的.NET库,请尝试使用GitSharp或nGit 。 GitSharp的源代码也可能很有用,因为您似乎是ac#developer而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
此博客条目具有上述所述方法的一个很好的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.