gpt4 book ai didi

git - 如何通过 http 设置 git?

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

我需要使用 git-over-http(智能 http)设置一个 git 服务器,但是网上可用的资源一团糟,混合了其他 apache 配置,缺少细节或不够明确。

我是根据我发现的可用资源中的不足来自己回答这个问题的。

最佳答案

首先有必要了解 git-over-http 有两个组件:git 和 apache。这两个通过名为 git-http-backend 的脚本连接。挑战在于配置这两个组件之间的接口(interface),以便通过 apache 转发对 git 的 http 请求。

注意:安全性不在本指南的讨论范围之内。

  1. 首先使用您的发行版的包管理器安装 git 和 apache2。

  2. 添加 apache 启用 git-over-http 所需的模块。这些是cgi、别名和env

$ a2enmod cgi alias env
  1. 将以下内容复制到 /etc/apache2/httpd.conf(不删除其中包含的任何其他内容)
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /data/git
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))$" \
"/usr/lib/git/git-http-backend/$1"
Alias /git /data/git
<Directory /usr/lib/git>
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
  1. 现在将两次出现的 /data/git 替换为服务器上 git 存储库的父目录(如果您还没有任何存储库,请不要担心,只需使用该目录你打算把它/它们放在哪里)

同时将 /usr/lib/git/git-http-backend 替换为系统上 git-http-backend 的位置,可以使用 $ find/-name 找到git-http-后端

可能是您系统上的 REDIRECT_REMOTE_USER 实际上覆盖了有效的 REMOTE_USER。如果此设置在完成后不起作用,请尝试删除该行。

根据 this源,可能需要用 Require all granted for apache 2.4 和更高版本替换 Directory 标记中的最后两行。

  1. 重启 apache 服务器:$ apache2ctl -k graceful

现在 apache 服务器已经设置好了,但我们还没有完成,设置 repos 的一些重要部分会影响此设置是否有效。

  1. 设置存储库:
$ mkdir myrepo.git
$ cd myrepo.git
$ git init --bare --shared
$ cp hooks/post-update.sample hooks/post-update
$ git update-server-info
$ chown -R wwwrun:www

这里重要的是要理解最后一行将 repo 的所有者更改为 apache2 用户。该用户在您的系统上可能不同。要查找 apache 用户,请执行 $ ps aux | egrep '(apache|httpd)'.然后找到用户的组名,执行$id user-name。在我的系统上,用户是 wwwrun 和组 www。相应地替换。

  1. 使用代码库

为了使用 repo,您​​需要知道 url。对于此设置,网址为 http://server.domain/myrepo.git

注意:https 将不起作用。

从客户端访问 repo 时,只需将其添加为远程即可:

$ git remote add origin http://server.domain/myrepo.git

然后你可以像任何其他 git 仓库一样与之交互。

关于git - 如何通过 http 设置 git?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26734933/

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