章节 ▾ 第二版

4.5 服务器上的 Git - Git Daemon

Git Daemon

接下来,我们将配置一个使用 “Git” 协议提供仓库服务的守护进程。这是对 Git 数据进行快速、无需身份验证访问的常见选择。请记住,由于这不是经过身份验证的服务,因此通过此协议提供的任何内容在其网络中都是公开的。

如果你在防火墙外的服务器上运行此服务,它应该只用于对全世界公开可见的项目。如果你在其上运行此服务的服务器位于防火墙内,你可能会将其用于大量人员或计算机(持续集成或构建服务器)具有只读访问权限的项目,而你不想为每个服务器添加 SSH 密钥。

在任何情况下,Git 协议都相对容易设置。基本上,你需要以守护进程方式运行此命令

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

--reuseaddr 选项允许服务器在无需等待旧连接超时的情况下重新启动,而 --base-path 选项允许人们克隆项目而无需指定完整路径,末尾的路径告诉 Git 守护进程在哪里查找要导出的仓库。如果你正在运行防火墙,还需要在设置的框上的端口 9418 上打一个洞。

你可以根据你运行的操作系统,通过多种方式将此进程守护化。

由于 systemd 是现代 Linux 发行版中最常见的 init 系统,因此你可以将其用于此目的。只需将文件放在 /etc/systemd/system/git-daemon.service 中,内容如下

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

你可能已经注意到,Git 守护进程在此处启动时,git 既是组又是用户。修改它以满足你的需求,并确保提供的用户存在于系统上。 此外,请检查 Git 二进制文件是否确实位于 /usr/bin/git,并在必要时更改路径。

最后,你可以运行 systemctl enable git-daemon 命令来让服务在启动时自动运行,并且可以使用 systemctl start git-daemonsystemctl stop git-daemon 命令来分别启动和停止该服务。

在其他系统上,你可能需要使用 xinetdsysvinit 系统中的一个脚本,或其他一些东西——只要你让该命令以后台守护进程的方式运行并受到某种方式的监控即可。

接下来,你必须告诉 Git 允许哪些仓库可以进行未经身份验证的基于 Git 服务器的访问。 你可以通过在每个仓库中创建一个名为 git-daemon-export-ok 的文件来完成此操作。

$ cd /path/to/project.git
$ touch git-daemon-export-ok

该文件的存在告诉 Git 可以无需身份验证即可提供此项目。

scroll-to-top