我正在使用Apache和git-http-backend.exe在WS 2008机器上设置Git服务器(1.7.2.3).我一直在关注一个良好的啧啧这里.我有GUI工作,我可以惹恼克隆,如果我把以下内容放在回购配置中我可以惹恼:
[http]
receivepack = true
Run Code Online (Sandbox Code Playgroud)
我已将以下内容添加到httpd.conf文件中:
SetEnv GIT_PROJECT_ROOT C:/GIT/Repositories
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))$" \
"C:/Program Files (x86)/git/libexec/git-core/git-http-backend.exe/$1"
<Directory />
Allow from all
</Directory>
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups
Require group repogeneral
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
当我添加"LocationMatch"时,我仍然可以克隆,或者通过在URL中指定一个名称,git clone http://jon@myserver.com
它会提示输入密码并进行克隆.
但当我试图回到回购时,我得到以下内容:
错误:无法访问URL http://jon@myserver.com/newtestrepo.git/,返回代码22致命:git-http-push failed
我一直在查看http-backend.exe手册页中的示例,但无法让它们工作.
这是我的群组文件,(这只是测试示例,所以没有任何可用于prod):
admin: jon steve admin
webview: jon steve web
repogeneral: jon …Run Code Online (Sandbox Code Playgroud) 我需要使用git-over-http(智能http)设置一个git服务器,但是在线可用的资源很混乱,混合了其他apache配置,缺少细节或者不够明确.
我是根据我发现缺乏可用资源的问题自己回答这个问题的.
我尝试使用git-http-backend设置一个git服务器,一切都按照我的要求运行,但有一点小事.
配置
<VirtualHost *:80>
ServerName git.server.com
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias /git /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/git/repos/git-receive-pack$">
AuthType Digest
AuthName "Git Repositories"
AuthUserFile /srv/git/.git-auth-file
AuthGroupFile /srv/git/.git-group-file
Require valid-user
</LocationMatch>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这允许每个人阅读repos但只有有效的用户才能阅读.让我烦恼的是网址是http://git.server.com/git/repos.我想摆脱URL 中的git,如http://git.server.com/repos.当我将配置更改为
<VirtualHost *:80>
ServerName git.server.com
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias / /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/repos/git-receive-pack$">
AuthType Digest
AuthName …Run Code Online (Sandbox Code Playgroud) 我正在设置一个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) 我目前正在使用Apache 2.4.7在Ubuntu LTS 14.04机器上设置一些git存储库.
这是apache配置:
SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
"(?x)^/git/(.*/(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))$" \
/usr/lib/git-core/git-http-backend
<Location /git/oswald.git>
Options +ExecCGI
AuthType Basic
DAV on
AuthName "Git"
AuthUserFile /etc/apache2/git_paragon_passwd
Require valid-user
Order allow,deny
Allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)
测试存储库在/var/www/html/git/oswald.git.在存储库中,我设置了config属性
http.receivepack=true
Run Code Online (Sandbox Code Playgroud)
该文件git-daemon-export-ok存在.
如果我现在尝试克隆:
git clone https://server/git/oswald.git
Run Code Online (Sandbox Code Playgroud)
认证后,我得到:
fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
Run Code Online (Sandbox Code Playgroud)
(git 2.1.0客户端,在服务器git 1.9.1上).
我尝试了几件事,所以如果我不使用git-http-backend并通过WebDAV我可以克隆但不能推送,使用git-http-backend我甚至无法克隆.
如果我改变的最后一行 …
Git通过 HTTPS 为 81 kB 存储库写入对象时挂起(不允许 SSH)。来自 Nginx 的具体错误信息access.log如下:
POST /Hello-World/.git/git-receive-pack HTTP/1.1" 504 183 "-" "git/2.28.0.windows.1"
Run Code Online (Sandbox Code Playgroud)
我在已挂载的 Debian 映像中托管 Nginx 和 Git 服务器。需要注意的重要事项:我www的所有网站文件都以只读方式单独安装。我的 Git 根文件夹也在里面www(即,www/git)。
sudo mount -o loop,offset=1 raspbian-stretch-lite.img /mnt/
sudo mount --bind www/ /mnt/usr/share/nginx/www/
sudo mount -o bind,remount,ro /mnt/usr/share/nginx/www
Run Code Online (Sandbox Code Playgroud)
我的 Nginx 配置如下:
server {
listen 443 ssl;
server_name git.domain.com;
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
# fast clone static files
location ~ \.git/objects/(?:[0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+\.(?:pack|idx))$ {
root /usr/share/nginx/www/git;
limit_except GET HEAD …Run Code Online (Sandbox Code Playgroud) 为了更多地了解 git,我尝试使用 Python 和 Flask 编写一个非常简单的 Git 服务器。我注册了一个端点并将调用重定向到git-http-backend。到目前为止,简单的拉动就可以正常工作。也可以进行简单/小的推动。
现在我偶然发现了git-upload-pack和git-receive-pack,我想知道为什么或何时需要它们?git-http-backend它们在后台使用吗?我不确定我是否还必须支持这些命令。
PS 我尝试着理解 SmartHTTP。这是否意味着全双工?或者什么是 SmartHTTP 与 Dumb?我不太明白如果它也只是接收和发送/推送文件,那么什么应该是智能的?