Git official document显示了使用git服务器通过http与apache和git-http-backend
的方式。
我希望通过http在我的程序中与git-http-backend
直接互动。
这就像apache代理所做的那样,但我需要从git客户端控制更多的东西,例如拒绝客户端pull
的用户名和存储库目录的路径。
如何直接使用git-http-backend
作为http服务?
您可以在docs/git-http-backend
上阅读其文档,并在http-backend.c
(tested here)中查看其来源。
由于它是一个Common Gateway Interface (CGI),它由一个监听器调用,如http服务器,还有任何其他监听器(!),如SSH。
请参阅Gitolite(授权层),它正是这样做的:因为它被称为git-xxx
(这里:git-hhtp-backend
),你可以调用:git http-backend
:这就是its gitolite-shell does。
由于该后端依次调用git services(git-upload-pack,git-receive-pack,objects / info / packs,...),你可以直接执行git-http-backend所做的事情。这也是gitolite implements here。
git-http-backend
在文档中描述为CGI程序。由于CGI程序本身不会说HTTP,因此您必须使用CGI协议与它通信(这是一个涉及环境变量和stdin和stdout的进程间通信协议)或者将其连接到HTTP服务器(如Apache) 。
该名称可能令人困惑,但这个“HTTP后端”落后于HTTP服务器。