如何在 Linux 上设置具有 HTTP 访问权限的 Git 服务器

Posted

技术标签:

【中文标题】如何在 Linux 上设置具有 HTTP 访问权限的 Git 服务器【英文标题】:How to set up a Git server with HTTP access on Linux 【发布时间】:2013-10-29 12:20:45 【问题描述】:

我需要在 Linux 机器上创建一个 Git 存储库,然后通过 HTTP 访问它。还需要一个用户的完全访问权限和对非用户的只读权限。

我之前创建了本地存储库,但我不知道如何创建它(例如:在 /var/www 或 /opt/git/... 内部)

我试过这样做:

-sudo 将 GitHub 存储库克隆到 /var/www/repos/repo.git -cd /var/www/repos/repo.git -sudo git --bare 更新服务器信息 -sudo mv hooks/post-update.sample hooks/post-update -sudo 服务 apache2 重启

然后我尝试从另一台机器访问这个存储库:

-使用浏览器:(http 协议)192.168.1.49/repo.git - 使用终端: git clone --bare (http 协议)192.168.1.49/repo.git

终端说:

正在克隆到裸存储库 repo.git... 致命:(http协议)192.168.1.49/repo.git/info/refs?service=git-upload-pack not found:你在服务器上运行了 git update-server-info 吗?

我想可能是权限问题。我需要如何管理 /var/www 中的权限?

编辑:已经修复,只是需要:

-将存储库放入 /var/www/repos/ 命名为 repo.git - 使用 sudo chown -R www-data:www-data /var/www 更改 www 文件夹的权限 - 使用 sudo a2enmod dav_fs 启用 webdav -config 文件到 /etc/apache2/conf.d 称为 git.conf - 使用用户创建文件 sudo htpasswd -c /etc/apache2/passwd.git user -重命名 pot-update 文件并使用 sudo mv /var/www/repos/repo.git/hooks/post-update.sample /var/www/repos/repo.git/hooks/post-update && sudo 使其可执行chmod a+x /var/www/repos/repo.git/hooks/post-update -更新服务器并使用 sudo git update-server-info && sudo service apache2 restart 重启 apache

并且,要解决推送问题:

将文件 .git/config 编辑到您的存储库文件夹(客户端计算机)中,并将用户名和密码放在 url 上: url = (http 协议)user:password@url/repos/repo.git

所以,现在我只需要为非用户设置只读即可。

【问题讨论】:

你为什么使用 sudo? @AD7six 不知道,跟着网上教程... 这不是编程问题,所以跑题了。 如果您想通过 http 设置写访问 - 这与堆栈溢出无关。如果你使用 sudo - 你会遇到权限问题,因为一切都归 root 所有。 “通常”你会设置 http 为只读,匿名访问并使用 ssh 进行读/写 - 这也很容易设置 @AD7six 是的,我同意你的看法,但这是学校作业,所以我们需要使用 http 进行读/写。 【参考方案1】:

已经修复,刚需:

-将存储库放入 /var/www/repos/ 命名为 repo.git

-使用 sudo chown -R www-data:www-data /var/www 更改 www 文件夹的权限

-使用 sudo a2enmod dav_fs 启用 webdav

-config 文件到 /etc/apache2/conf.d 中称为 git.conf

-使用 sudo htpasswd -c /etc/apache2/passwd.git 用户创建文件

-重命名 pot-update 文件并使用 sudo mv /var/www/repos/repo.git/hooks/post-update.sample 使其可执行

/var/www/repos/repo.git/hooks/post-update && sudo chmod a+x

/var/www/repos/repo.git/hooks/post-update

-更新服务器并使用 sudo git update-server-info && sudo service apache2 restart 重启 apache

并且,要解决推送问题:

将文件 .git/config 编辑到您的存储库文件夹(客户端计算机)

并把用户名和密码放在url上:url = (http

protocol)user:password@url/repos/repo.git

所以,现在我只需要为非用户设置只读即可。

【讨论】:

以上是关于如何在 Linux 上设置具有 HTTP 访问权限的 Git 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux Ubuntu 上配置 Cassandra 的访问权限

在SQL数据访问中如何对不同级别设置访问权限

在Linux系统中,如何更改文件的访问权限

Linux之用户管理与权限控制(上)

linux中,如何设置文件夹的访问权限?

如何取消Access 用户和组权限