3

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

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


有人说,

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

参考这个链接

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


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

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

4

1 回答 1

1

如果您只是在寻找与 GIT 交互的 .NET 库,请尝试GitSharpnGitGitSharp的源代码也可能很有用,因为您似乎是 ac# 开发人员并且 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

这个博客条目有一个上述方法的一个很好的例子。

于 2013-05-29T06:10:52.780 回答