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
使用Apache和mod_宏设置私有多个公共/私有Git存储库_Git_Apache - Fatal编程技术网

使用Apache和mod_宏设置私有多个公共/私有Git存储库

使用Apache和mod_宏设置私有多个公共/私有Git存储库,git,apache,Git,Apache,我一直在我的私有服务器上运行SVN存储库。我有几个项目需要维护,所有项目都使用标准配置模式进行维护,该模式被用作Apache宏。基本上我的结构非常简单 /svnroot /报告1 /报告2 /viewvc /报告1 /报告2 映射到 /主页/me/srv/svn/repos /报告1 /报告2 有多个宏,因为每个存储库都有自己的身份验证方案(公共读取、身份验证提交或完全私有) 现在我想去吉特 即使我找到了一些使用Apache和Git的配置指令,我也没有正确理解它

我一直在我的私有服务器上运行SVN存储库。我有几个项目需要维护,所有项目都使用标准配置模式进行维护,该模式被用作Apache
。基本上我的结构非常简单

    • /svnroot
      • /报告1
      • /报告2
    • /viewvc
      • /报告1
      • /报告2
映射到

  • /主页/me/srv/svn/repos
    • /报告1
    • /报告2
有多个宏,因为每个存储库都有自己的身份验证方案(公共读取、身份验证提交或完全私有)

现在我想去吉特 即使我找到了一些使用Apache和Git的配置指令,我也没有正确理解它们。以下是我的问题:


我想要我的虚拟主机(
https://git.example.com
)托管多个Git存储库,所有这些都可以通过shell轻松配置(例如添加
mod_宏
使用
指令并通过SSH运行
Git init
)。每个人都有自己的权限系统,例如根据
.htpasswd
。典型的存储库路径可以是
https://git.example.com/[projects或任何东西]/myProject.git
映射到像
/home/me/srv/git/repos/myProject这样的地方

在Apache中如何做到这一点?


到目前为止还很糟糕 我试着构建一个Git配置,如下所示(还没有测试,因为它现在什么都做不了)

根据我的经验,上面的正则表达式匹配绝对路径,如

/git/sdf/HEAD
/git/blablabla/blabla/objects/info/sdfs
/git/daf/git-receive-pack
好的,看起来我所有的项目都将放在
/git/
下,如果我不更改它,正确吗

但是,由于我目前不知道Git over HTTP协议是如何工作的,如何独立于其他存储库保护每个存储库?

挖掘可能会提供答案。在我尝试之前,这里是候选答案

基本上,上面的全局配置告诉我们,以给定模式结尾的所有内容(例如,
git receive pack
)都被发送到git CGI。嗯

但是使用适当的
LocationMatch
Alias
指令应该可以工作。这是一份草稿:

  • 使用
    Alias
    将文件系统目录映射到某个位置
  • 如果需要,使用
    设置
    .htaccess
    。SVN使用
    HTTP动词
    来区分读/写操作,Git使用
    Git接收包
    进行写操作。本书建议使用
    LocationMatch
    指令
  • 将所有内容包装在
    宏中

该配置是gitweb配置。它允许我以一种奇特的方式显示Git存储库,而不是推送。对于推送,我应该调查WebDAV或智能HTTP()
 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/git-http-backend/$1"
/git/sdf/HEAD
/git/blablabla/blabla/objects/info/sdfs
/git/daf/git-receive-pack