Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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认证推送apache_Git_Apache - Fatal编程技术网

Git认证推送apache

Git认证推送apache,git,apache,Git,Apache,我有几个Git存储库。所有这些都可以通过apache服务器访问,并且所有人都可以进行R/W访问。但是,某些存储库应该对其进行身份验证。我做过类似的事情 <LocationMatch "^/.*/git-receive-pack$"> AuthType Basic AuthName "Git Access" AuthBasicProvider file # Password file created with htpasswd AuthUserF

我有几个Git存储库。所有这些都可以通过apache服务器访问,并且所有人都可以进行R/W访问。但是,某些存储库应该对其进行身份验证。我做过类似的事情

<LocationMatch "^/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthBasicProvider file
    # Password file created with htpasswd
    AuthUserFile /sample/password
    Require valid-user
</LocationMatch>
http://user@server/git/foo.git/info/refs?service=git-receive-pack

AuthType Basic
AuthName“Git访问”
AuthBasicProvider文件
#使用htpasswd创建的密码文件
AuthUserFile/示例/密码
需要有效用户
但它要求所有存储库的用户名和密码。我只想为少数存储库启用它。

一些背景 其思想是,当通过HTTP[S]推送时,Git执行如下请求

<LocationMatch "^/.*/git-receive-pack$">
    AuthType Basic
    AuthName "Git Access"
    AuthBasicProvider file
    # Password file created with htpasswd
    AuthUserFile /sample/password
    Require valid-user
</LocationMatch>
http://user@server/git/foo.git/info/refs?service=git-receive-pack
<>这个URI的部分< <代码> <代码>或<代码> <代码>指令考虑匹配时

/git/foo.git/info/refs?service=git-receive-pack
它可以分为几个部分:

  • 通用前缀,包括存储库的名称:

    /git/foo.git
    
    这是您在向Git讲述存储库的URI时直接指定的内容, 就像做
    git克隆一样http://user@server/git/foo.git

  • 技术部分,告诉服务器端Git您希望从请求中得到什么:

    /info/refs?service=git-receive-pack
    
    这部分是由客户端Git添加的,您无法控制它

  • 如何解决手头的问题 指令中的
    *
    位匹配零个或多个字符,因此它显然匹配Git URI中的任何字符

    您需要改进此模式,以便以某种方式仅引用希望应用推送限制的回购。还请记住,如果您使用的是公共前缀(如上面示例中的
    /git/
    ),那么它也必须匹配

    现在要写一个合适的正则表达式

    一种方法是使用所谓的更改(如中所示)直接指定它们

    <LocationMatch "^/git/(repo1|repo2|repo3)/.*/git-receive-pack$">
    
    后一种方法不需要您在添加另一个需要经过身份验证的推送的存储库时更新Apache的配置并重新加载它:只需将其放到由该前缀映射的目录中即可

    当然,URI规范的确切部分取决于配置的其余部分(比如是否使用not的前缀
    ^/git/