章節 ▾ 第二版

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 可以無需身份驗證地提供此專案。