-
1. 起步
-
2. Git 基础
-
3. Git 分支
-
4. 服务器上的 Git
- 4.1 协议
- 4.2 在服务器上部署 Git
- 4.3 生成 SSH 公钥
- 4.4 架设服务器
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第三方托管服务
- 4.10 小结
-
5. 分布式 Git
-
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 Daemon
Git Daemon
接下来,我们将设置一个守护进程,使用“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,可以不进行身份验证来提供此项目。