我正在设置一个git-http-backend CGI脚本来处理我的git.domain子域.服务器位于AWS云上的ELB(弹性负载平衡器)后面.我的服务器配置如下(我的git托管由gitolite处理):
<VirtualHost *:80>
ServerName git.domain
ServerAdmin hjpotter92+git@domain
#SuexecUserGroup git git
DocumentRoot /opt/gitolite/repositories/
PerlLoadModule Apache::Authn::Redmine
SetEnv GIT_PROJECT_ROOT /opt/gitolite/repositories/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER # Have also tried removing this variable
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/opt/gitolite/git-core/git-http-backend/$1
<Directory "/opt/gitolite/git-core">
AllowOverride None
Options +ExecCGI -Includes
Require all granted
</Directory>
<Location />
# enabled in desparation...
# saw it somewhere in bugzilla powered mailing list
DAV On
Order …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个模拟 Git 远程的网络服务器。用户应该能够从我的服务器克隆或拉取、编辑文件、提交和推送(需要身份验证)\xe2\x80\x94 使用 Git 执行的正常操作。然而,在服务器端并不是一个裸露的 Git 存储库或任何东西;数据以其他格式存储,并且仅在请求时进行转换。
\n我花了很多时间试图了解 Git Smart HTTP 协议是如何工作的,这是我目前所知道的。
\n从http-protocol 上的 Git 文档,我知道这GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.1应该引发以下(示例)响应:
HTTP/1.1 200 OK<CRLF>\nContent-Type: application/x-git-upload-pack-advertisement<CRLF>\nCache-Control: no-cache<CRLF>\n<CRLF>\n001e# service=git-upload-pack<LF>\n0000<no LF>\n004895dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint<NUL>multi_ack<LF>\n003fd049f6c27a2244e12041955e262a404c7faba355 refs/heads/master<LF>\n003c2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0<LF>\n003fa3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}<LF>\n0000\nRun Code Online (Sandbox Code Playgroud)\n从我自己对我的 repo 进行的实验来看,提交很少,看来 GitHub 到目前为止完全在文档中描述的协议限制内:
\nHTTP/1.1 200 OK<CRLF>\nServer: GitHub Babel 2.0<CRLF>\nContent-Type: application/x-git-upload-pack-advertisement<CRLF>\nContent-Security-Policy: default-src \'none\'; sandbox<CRLF>\nTransfer-Encoding: chunked<CRLF>\nexpires: Fri, 01 Jan 1980 00:00:00 GMT<CRLF>\npragma: no-cache<CRLF>\nCache-Control: no-cache, max-age=0, must-revalidate<CRLF>\nVary: Accept-Encoding<CRLF>\nX-Frame-Options: DENY<CRLF>\nX-GitHub-Request-Id: [redacted]<CRLF>\n<CRLF>\n001e# service=git-upload-pack<LF>\n0000<no LF>0156feee8d0aeff172f5b39e3175175d027f3fd5ecc1 HEAD<NUL>multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not …Run Code Online (Sandbox Code Playgroud)