繁体   English   中英

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

[英]What details difference between server side and client of GIT smart HTTP protocol

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

最好的方法是提供一些推荐的参考书和代码。


有人说,

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

参考此链接

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


按照上面的问题。 我们可以使用--stateless-rpc参数处理包含git.exe receive-packgit.exe upload-pack命令git.exe upload-pack 实现的代码在这里这里

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

如果您只是在寻找与GIT交互的.NET库,请尝试使用GitSharpnGit 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM