-
A1. 附录 A: Git 在其他环境
- A1.1 图形界面
- A1.2 Visual Studio 中的 Git
- A1.3 Visual Studio Code 中的 Git
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git
- A1.5 Sublime Text 中的 Git
- A1.6 Bash 中的 Git
- A1.7 Zsh 中的 Git
- A1.8 PowerShell 中的 Git
- A1.9 小结
-
A2. 附录 B: 在应用程序中嵌入 Git
-
A3. 附录 C: Git 命令
4.5 服务器上的 Git - Git 守护进程
Git 守护进程
接下来,我们将设置一个使用“Git”协议提供仓库服务的守护进程。对于需要快速、无需身份验证地访问 Git 数据而言,这是一个常见的选择。请记住,由于这不是一个经过身份验证的服务,因此通过此协议提供的任何内容在其网络范围内都是公开的。
如果你在防火墙之外的服务器上运行此服务,它应该仅用于向全球公开的项目。如果你运行该服务的服务器位于防火墙内,你也可以将其用于大量人员或计算机(如持续集成或构建服务器)需要只读访问权限,且你不希望为每个用户添加 SSH 密钥的项目。
无论如何,Git 协议都非常容易设置。基本上,你需要以守护进程的方式运行以下命令
$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/
--reuseaddr 选项允许服务器在不等待旧连接超时的情况下重启,而 --base-path 选项允许用户在不指定完整路径的情况下克隆项目,最后的路径则告诉 Git 守护进程到哪里去查找要导出的仓库。如果你配置了防火墙,还需要在你设置此服务的机器上打开 9418 端口。
根据你所使用的操作系统,可以通过多种方式将此进程守护进程化。
由于 systemd 是现代 Linux 发行版中最常用的初始化系统,你可以将其用于此目的。只需在 /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-daemon 和 systemctl stop git-daemon 分别启动和停止该服务。
在其他系统上,你可能需要使用 xinetd、sysvinit 系统中的脚本或其他工具——只要你能以某种方式将该命令守护进程化并进行监控即可。
接下来,你必须告诉 Git 哪些仓库允许未经身份验证的 Git 服务器访问。你可以在每个仓库中创建一个名为 git-daemon-export-ok 的文件来实现这一点。
$ cd /path/to/project.git
$ touch git-daemon-export-ok
该文件的存在即告诉 Git:此项目可以在无需身份验证的情况下提供服务。