Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Git-http-backend.exe在Windows上设置Git服务器_Git_Apache2_Git Http Backend - Fatal编程技术网

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

使用Git-http-backend.exe在Windows上设置Git服务器,git,apache2,git-http-backend,Git,Apache2,Git Http Backend,我正在使用Apache和Git-http-backend.exe在WS-2008计算机上设置Git服务器(1.7.2.3)。我一直在关注一个好的图坦卡蒙。我的GUI工作正常,我可以轻松克隆,如果我将以下内容放入回购的配置中,我可以轻松推送: [http] receivepack = true 我已将以下内容添加到httpd.conf文件中: SetEnv GIT_PROJECT_ROOT C:/GIT/Repositories SetEnv GIT_HTTP_EXPORT_ALL Scrip

我正在使用Apache和Git-http-backend.exe在WS-2008计算机上设置Git服务器(1.7.2.3)。我一直在关注一个好的图坦卡蒙。我的GUI工作正常,我可以轻松克隆,如果我将以下内容放入回购的配置中,我可以轻松推送:

[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>
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>
以下是用户文件:

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推送源主机

我被要求输入密码,我输入密码,然后它再次要求输入密码,然后我得到以下错误:

C:\temp\remotetest\remotetest>git推送源主机 密码: 密码: 错误:无法访问URL,返回代码22 致命:git http推送失败

在我的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
<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>
有趣的是,当我在URL中使用用户名进行克隆时,不管我输入什么密码,它仍然可以工作。我想这是因为我应该能够匿名拉。不知道为什么它会在那个时候要求输入密码

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

[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>
我更改了httpd.conf以使用以下内容:

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
<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>
当时我正试图“推”回回购协议,但它们是GET命令而不是POST。不确定PROPFIND是什么,还没有找到太多关于它的信息。我想,(四处阅读),可能会有某种重写正在进行,那就是把帖子改成GET并杀死它,或者别的什么。不过,在这一点上,我还是有点力不从心


谢谢

好的,地狱已经冻结了,我终于让它工作了

我相信我的设置有两个根本错误

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

SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
其次,我无法使物理“目录”工作


选项+执行CGI
AuthType Basic
AuthName内部网
AuthUserFile“C:/GIT/Apache/config/users”
需要有效用户
为了解决这个问题,我对拉和推都使用了locationMatch。这意味着您必须进行身份验证才能进行推拉操作。如果你想烦恼拉你可以删除“git上传包”部分

希望这能帮助别人

这是我的最后一个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>
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>
DocumentRoot“C:/GIT/Apache/www”
选项+执行CGI
通融
通融
AuthType Basic
AuthName内部网
AuthUserFile“C:/GIT/Apache/config/users”
需要有效用户
SetEnv GIT_PROJECT_ROOT C:/GIT/Apache/repositories
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
脚本别名匹配\
“(?x)^/(.*/(总目)\
信息/参考文献|\
对象/(信息/[^/]+|\
[0-9a-f]{2}/[0-9a-f]{38}|\
pack/pack-[0-9a-f]{40}\(pack | idx))|\
git-(上传|接收)-打包)$”\
“C:/Program Files/git/libexec/git core/git http backend.exe/$1”
选项+执行CGI
AuthType Basic
AuthName内部网
AuthUserFile“C:/GIT/Apache/config/users”
需要有效用户
选项+执行CGI
AuthType Basic
AuthName内部网
AuthUserFile“C:/GIT/Apache/config/users”
需要有效用户

我不知道为什么“
htdocs
”会出现在
目录定义中。这是Apache提供文件的默认位置。我使用PHPGUI显示存储库,它使用相同的authuserfile,并提供弹出式登录,使用相同的用户名和密码。使用它作为测试,以确保Apache能够理解用户密码文件。这个问题应该是打开的,因为它较少涉及编程,更多涉及设置和配置,不是吗?我确实考虑过这一点,但我在stackoverflow上发现的git问题和我在ServerFault上发现的一样多。反馈非常好。多谢各位+嗨,乔恩,你的工作做得很好。你能帮我理解你是如何管理用户配置的吗?因为这似乎不是你的问题you@pollux1er最后我搬到了github。我只是为自己使用它,所以没有太多的用户担心。我现在记不太清楚了,很抱歉,还有GL.Thx@Jon为你和你自己的Awnser写了封信,但我在自检中发现了你配置文件中的一些错误。您需要将完整位置添加到您的
AuthUserFile
。如果不这样做,您会一次又一次地出现这样的500个错误
AH01620:无法打开密码文件
My solution:
AuthUserFile“C:/GIT/Apache/config/users/.htaccess”