gpt4 book ai didi

git - 使用 git-http-backend.exe 在 Windows 上设置 Git 服务器

转载 作者:IT王子 更新时间:2023-10-29 01:15:26 25 4
gpt4 key购买 nike

我正在使用 Apache 和 git-http-backend.exe 在 WS 2008 机器上设置 Git 服务器 (1.7.2.3)。我一直在关注一个好tut here .我有 GUI 工作,我可以烦人地克隆,如果我将以下内容放在 repo 的配置中,我可以烦人地推送:

[http]
receivepack = true

我已将以下内容添加到 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>

当我添加“LocationMatch”时,我仍然可以恼人地克隆或通过在 URL 中指定一个名称,git clone http://jon@myserver.com

它将提示输入密码并克隆。

但是当我尝试推回 repo 协议(protocol)时,我得到以下信息:

错误:无法访问 URL http://jon@myserver.com/newtestrepo.git/ , 返回代码 22 致命:git-http-push 失败

我一直在看 http-backend.exe man page例如,但无法让它们工作。

这是我的组文件,(这只是测试示例,因此不会在产品中使用任何内容):

admin: jon steve admin
webview: jon steve web
repogeneral: jon steve
testrepo: jon admin
testrepo2: jon steve web

这是用户文件:

jon:$apr1$kEKVExYx$guIF9oYV8buGhFLZr16XN0
steve:$apr1$jvgjF9nv$PvWsHH.cSOBN5ymk6NT1B0
admin:$apr1$vzXgDskN$oszCei3tkHNUgtLj2HkHF/
web:$apr1$wS0do7hb$VA9tsc9c9LwY5PcjfhdwK0

我知道用户名 jon 的工作方式就像我将目录要求放在 gui 部分一样我可以使用用户名 jon 登录没问题,(指向与 locationmatch 相同的用户和组文件)。

我不确定此时我错过了什么配置(假设是配置问题)。

关于克服最后一个障碍的任何建议都会很棒。

编辑

我又玩了一些,这是我掌握的信息:

如果我克隆一个仓库:

git clone http://jon@myserver.com/remotetest.git

我可以取出存储库,但是当我尝试用以下命令返回时:

git push origin master

我被要求输入密码,我输入密码,然后再次要求输入密码,然后出现以下错误:

C:\temp\remotetest\remotetest>git push origin master密码:密码:错误:无法访问 URL http://jon@myserver.com/remotetest.git/ , 返回代码 22致命:git-http-push 失败

在我的 Apache access.log 中,我得到以下信息:

192.168.1.2 - - [29/Sep/2010:21:58:19 +0100] "GET /remotetest.git/info/refs?service=git-upload-pack HTTP/1.1" 200 38
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs?service=git-receive-pack HTTP/1.1" 403 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs HTTP/1.1" 200 -
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/HEAD HTTP/1.1" 200 23

有趣的是,当我使用 URL 中的用户名克隆时,无论我输入什么密码,它仍然有效。我假设这是因为我应该能够匿名 pull 。不知道为什么它在那个时候要求输入密码。

我也在日志错误中看到了这个:

[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe

编辑 2

我尝试通过以下方式重新创建密码文件:

htpasswd -c -m C:/git/apacheconfig/users jon

但这没有帮助。

编辑 3

httpd.conf 中的 PHP 配置,它使用相同的用户文件进行基本身份验证:

<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
AuthName "GitUsers"
AuthType Basic
AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile C:/GIT/ApacheConfig/groups

require group webview
</Directory>

编辑 4

好的,这样我就可以愉快地克隆和推送了,但是推送的身份验证失败了。

C:\temp\test2\temp\test>git push origin master
Password:
Password:
error: Cannot access URL http://jon@192.168.10.97:8000/repositories/test.git/, return code 22
fatal: git-http-push failed

我更改了 httpd.conf 以使用以下内容:

<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories"
SetEnv GIT_HTTP_EXPORT_ALL

<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories">
Options Indexes FollowSymLinks MultiViews Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<LocationMatch "^/repositories/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories/.htpasswd"
Require valid-user
</LocationMatch>
ScriptAliasMatch \
"(?x)^/repositories/(.*/(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/$1"

ErrorLog C:/GIT/error_log
CustomLog C:/GIT/access_log combined
</VirtualHost>

有趣的是,当我创建一个新的 repo (git init --bare newrepo.git) 时,它没有创建 info/refs 文件。我必须执行“git update-server-info”命令来创建它。

Apache Access 日志有一些有趣的东西可以作为线索:

192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 -
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/HEAD HTTP/1.1" 200 23
192.168.10.97 - - [05/Oct/2010:22:48:28 +0100] "PROPFIND /repositories/test.git/ HTTP/1.1" 405 248

那是我试图“推”回存储库的时候,但它们是 GET 命令,没有 POST。不确定 PROPFIND 是什么,还没有找到太多相关信息。我认为,(四处阅读)可能正在进行某种重写,即将 POST 更改为 GET 并终止它,或其他。不过,我目前无法理解。

谢谢

最佳答案

好的, hell 已经卡住,我终于开始工作了!

我认为我的设置有两处根本错误。

1) 用户没有通过身份验证,我发现这有帮助:

SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

其次,我无法让物理“目录”工作。

<Directory "C:/GIT/Apache/repositories">
Options +ExecCGI
AuthType Basic
AuthName intranet
AuthUserFile "C:/GIT/Apache/config/users"
Require valid-user
</Directory>

为了解决这个问题,我对 pull 和推送都使用了 locationMatch。这意味着您必须进行身份验证才能 pull 和推送。如果你想要烦人的 pull ,你可以删除“git-upload-pack”部分。

希望这可以帮助其他人。

这是我最终的 httpd.conf 文件:

DocumentRoot "C:/GIT/Apache/www"

<Directory />
Options +ExecCGI
Allow from all
</Directory>

<Directory "C:/GIT/Apache/www">
Allow from all
</Directory>

<Directory "C:/GIT/Apache/www/secure">
AuthType Basic
AuthName intranet
AuthUserFile "C:/GIT/Apache/config/users"
require valid-user
</Directory>

SetEnv GIT_PROJECT_ROOT C:/GIT/Apache/repositories
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
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/git/libexec/git-core/git-http-backend.exe/$1"


<LocationMatch "^/.*/git-receive-pack$">
Options +ExecCGI
AuthType Basic
AuthName intranet
AuthUserFile "C:/GIT/Apache/config/users"
Require valid-user
</LocationMatch>

<LocationMatch "^/.*/git-upload-pack$">
Options +ExecCGI
AuthType Basic
AuthName intranet
AuthUserFile "C:/GIT/Apache/config/users"
Require valid-user
</LocationMatch>

关于git - 使用 git-http-backend.exe 在 Windows 上设置 Git 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com