2013-05-20 33 views
3

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

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


有人说,

libgit2已经暴露了packbuilder。但是,你必须自己实现服务器端协议。

reference to this link

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


按照上面的问题。我们可以使用git.exe receive-packgit.exe upload-pack命令与--stateless-rpc参数进行打包。实施的代码是herehere

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

+0

看看git的源代码;) – Chronial

+0

我不知道为什么我找不到任何的参考书?我不想阅读更多的源代码,因为我有更多的时间。 – Aimeast

+0

而我不擅长C语言。这对我来说非常困难。 – Aimeast

回答

1

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

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

较新的Smart-Git协议现在向GET请求添加了另一个参数,旧的服务器将忽略(早于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中推-u原点主”

回报:

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

This blog entry具有上文所描述的方法的一个体面例子。

+0

Tks!我知道你上面所说的一切。谢谢你们一样! – Aimeast

相关问题