章節 ▾ 第二版

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 發行版中最常見的 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