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-daemonsystemctl stop git-daemon 分別啟動和停止服務。

在其他系統上,您可能會想使用 xinetd,您 sysvinit 系統中的一個腳本,或其他類似的東西 —— 只要您能讓該命令以守護進程方式執行並以某種方式監控即可。

接下來,您必須告訴 Git 哪些儲存庫允許未經身分驗證的 Git 伺服器存取。您可以在每個儲存庫中建立一個名為 git-daemon-export-ok 的檔案來做到這一點。

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

該檔案的存在告訴 Git,可以不用驗證身份來提供此專案的服務。

scroll-to-top