?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
git-daemon - 一個(gè)非常簡(jiǎn)單的Git倉(cāng)庫(kù)服務(wù)器
git daemon [--verbose] [--syslog] [--export-all] [--timeout=<n>] [--init-timeout=<n>] [--max-connections=<n>] [--strict-paths] [--base-path=<path>] [--base-path-relaxed] [--user-path | --user-path=<path>] [--interpolated-path=<pathtemplate>] [--reuseaddr] [--detach] [--pid-file=<file>] [--enable=<service>] [--disable=<service>] [--allow-override=<service>] [--forbid-override=<service>] [--access-hook=<path>] [--[no-]informative-errors] [--inetd | [--listen=<host_or_ipaddr>] [--port=<n>] [--user=<user> [--group=<group>]]] [<directory>…]
一個(gè)非常簡(jiǎn)單的TCP Git守護(hù)進(jìn)程,通常在端口“DEFAULT_GIT_PORT”上監(jiān)聽9418.它等待連接請(qǐng)求服務(wù),并在服務(wù)啟用時(shí)提供服務(wù)。
它會(huì)驗(yàn)證該目錄是否具有魔術(shù)文件“git-daemon-export-ok”,并且它會(huì)拒絕導(dǎo)出任何未明確標(biāo)記為導(dǎo)出的Git目錄(除非--export-all
指定了該參數(shù))。如果您將某些目錄路徑作為git daemon
參數(shù)傳遞,則可以將報(bào)價(jià)進(jìn)一步限制為包含這些參數(shù)的白名單。
默認(rèn)情況下,只有upload-pack
服務(wù)已啟用,供應(yīng)git fetch-pack
和git ls-remote
客戶,這是從調(diào)用git fetch
,git pull
和git clone
。
這非常適合只讀更新,即從Git存儲(chǔ)庫(kù)中提取。
一個(gè)upload-archive
也存在服務(wù)git archive
。
--strict-paths
準(zhǔn)確地匹配路徑(即當(dāng)真實(shí)路徑為“/foo/repo.git”或“/foo/repo/.git”時(shí)不允許“/ foo / repo”)并且不執(zhí)行用戶相對(duì)路徑。git daemon
將在此選項(xiàng)啟用且未指定白名單時(shí)拒絕啟動(dòng)。
--base-path=<path>
將所有路徑請(qǐng)求重新映射為相對(duì)于給定路徑。這是一種“混帳根” -如果您運(yùn)行git daemon
與--base-path=/srv/git
在example.com,那么如果您稍后嘗試?yán)?code>git://example.com/hello.git,git daemon
將解釋路徑/srv/git/hello.git
。
--base-path-relaxed
如果啟用了--base-path并且回購(gòu)查找失敗,則使用此選項(xiàng)git daemon
將嘗試查找而無需為基本路徑添加前綴。這對(duì)于切換到--base-path用法很有用,同時(shí)仍然允許舊的路徑。
--interpolated-path=<pathtemplate>
為了支持虛擬主機(jī),可以使用內(nèi)插路徑模板來動(dòng)態(tài)構(gòu)建備用路徑。該模板支持由客戶端提供的目標(biāo)主機(jī)名的%H,但轉(zhuǎn)換為全部小寫,%CH表示規(guī)范主機(jī)名,%IP表示服務(wù)器IP地址,%P表示端口號(hào),%D表示絕對(duì)路徑指定的存儲(chǔ)庫(kù)。插值后,路徑將根據(jù)目錄白名單進(jìn)行驗(yàn)證。
--export-all
允許從類似Git存儲(chǔ)庫(kù)(具有objects
和refs
子目錄)的所有目錄中提取,即使它們沒有該git-daemon-export-ok
文件。
--inetd
讓服務(wù)器作為inetd服務(wù)運(yùn)行。意味著--syslog。與--detach,--port,--listen,--user和--group選項(xiàng)不兼容。
--listen=<host_or_ipaddr>
監(jiān)聽特定的IP地址或主機(jī)名。如果支持,IP地址可以是IPv4地址或IPv6地址。如果不支持IPv6,則--listen = hostname也不受支持,并且 - 必須給予listen。可以給予不止一次。與--inetd
選項(xiàng)不兼容。
--port=<n>
聽取另一個(gè)端口。與--inetd
選項(xiàng)不兼容。
--init-timeout=<n>
建立連接和接收到客戶端請(qǐng)求之間的時(shí)間(以秒為單位)(通常是一個(gè)相當(dāng)?shù)偷闹担驗(yàn)樗鼞?yīng)該基本上立即)。
--timeout=<n>
特定客戶端子請(qǐng)求超時(shí)(以秒為單位)。這包括服務(wù)器處理子請(qǐng)求所用的時(shí)間以及等待下一個(gè)客戶端請(qǐng)求所花費(fèi)的時(shí)間。
--max-connections=<n>
并發(fā)客戶端的最大數(shù)量,默認(rèn)為32.將其設(shè)置為零,無限制。
--syslog
記錄到syslog而不是stderr。請(qǐng)注意,這個(gè)選項(xiàng)并不意味著--verbose,因此默認(rèn)情況下只會(huì)記錄錯(cuò)誤條件。
--user-path --user-path=<path>
允許在請(qǐng)求中使用?用戶符號(hào)。當(dāng)指定不帶參數(shù)時(shí),對(duì)git:// host /?alice / foo的請(qǐng)求將作為訪問foo
用戶主目錄中存儲(chǔ)庫(kù)的請(qǐng)求alice
。如果--user-path=path
指定,則將同一請(qǐng)求作為訪問path/foo
用戶主目錄中的存儲(chǔ)庫(kù)的請(qǐng)求alice
。
--verbose
記錄有關(guān)傳入連接和請(qǐng)求文件的詳細(xì)信息。
--reuseaddr
綁定偵聽套接字時(shí)使用SO_REUSEADDR。這允許服務(wù)器在不等待舊連接超時(shí)的情況下重新啟動(dòng)。
--detach
從外殼分離。意味著--syslog。
--pid-file=<file>
保存進(jìn)程ID file
。守護(hù)進(jìn)程運(yùn)行時(shí)忽略--inetd
。
--user=<user> --group=<group>
在進(jìn)入服務(wù)循環(huán)之前更改守護(hù)進(jìn)程的uid和gid。如果只--user
給出沒有--group
,則使用用戶的主要組ID。該選項(xiàng)的值給出,getpwnam(3)
并且getgrnam(3)
不支持?jǐn)?shù)字ID。
使用這些選項(xiàng)時(shí)出錯(cuò)是錯(cuò)誤的--inetd
; git daemon
如果需要,可以在產(chǎn)卵之前使用inet守護(hù)進(jìn)程的功能來實(shí)現(xiàn)。
像很多切換用戶ID的程序一樣,守護(hù)進(jìn)程不會(huì)重置環(huán)境變量,比如$HOME
它運(yùn)行g(shù)it程序時(shí),比如upload-pack
和receive-pack
。使用此選項(xiàng)時(shí),您可能還想在啟動(dòng)守護(hù)程序之前將其設(shè)置并導(dǎo)出HOME
到主目錄<user>
,并確保該目錄中的任何Git配置文件都可讀<user>
。
--enable=<service> --disable=<service>
默認(rèn)情況下,啟用/禁用整個(gè)服務(wù)站點(diǎn)。請(qǐng)注意,如果服務(wù)器被標(biāo)記為可覆蓋,并且存儲(chǔ)庫(kù)通過配置項(xiàng)啟用該服務(wù),則每個(gè)存儲(chǔ)庫(kù)仍可以啟用服務(wù)禁用的整個(gè)網(wǎng)站。
--allow-override=<service> --forbid-override=<service>
允許/禁止覆蓋每個(gè)存儲(chǔ)庫(kù)配置的站點(diǎn)范圍默認(rèn)值。默認(rèn)情況下,所有服務(wù)都可能被覆蓋。
--no-informative-errors
當(dāng)信息錯(cuò)誤被打開時(shí),git-daemon將向客戶端報(bào)告更多詳細(xì)錯(cuò)誤,將“沒有這樣的存儲(chǔ)庫(kù)”與“未導(dǎo)出的存儲(chǔ)庫(kù)”等條件區(qū)分開來。這對(duì)客戶來說更方便,但可能會(huì)泄露有關(guān)未導(dǎo)出存儲(chǔ)庫(kù)存在的信息。如果未啟用信息性錯(cuò)誤,則所有錯(cuò)誤都會(huì)向客戶報(bào)告“拒絕訪問”。缺省值是--no-informative-errors。
--access-hook=<path>
每次客戶端連接時(shí),首先運(yùn)行帶有服務(wù)名稱(例如“upload-pack”)的<path>指定的外部命令,存儲(chǔ)庫(kù)路徑,主機(jī)名(%H),規(guī)范主機(jī)名(%CH),IP地址%IP)和TCP端口(%P)作為其命令行參數(shù)。外部命令可以決定通過以非零狀態(tài)退出來退出服務(wù)(或通過以零狀態(tài)退出來允許它)。它還可以查看$ REMOTE_ADDR和$REMOTE_PORT
環(huán)境變量,以便在做出此決定時(shí)了解請(qǐng)求者。
外部命令可以選擇將一行寫入其標(biāo)準(zhǔn)輸出,以便在拒絕服務(wù)時(shí)作為錯(cuò)誤消息發(fā)送給請(qǐng)求方。
<directory>
要添加到允許目錄的白名單的目錄。除非指定了--strict-paths,否則它還將包含每個(gè)指定目錄的子目錄。
這些服務(wù)可以使用此命令的命令行選項(xiàng)進(jìn)行全局啟用/禁用。如果需要更細(xì)粒度的控制(例如,允許git archive
僅針對(duì)幾個(gè)選定的存儲(chǔ)庫(kù)運(yùn)行守護(hù)進(jìn)程),則可以使用每個(gè)存儲(chǔ)庫(kù)配置文件啟用或禁用它們。
upload-pack
這個(gè)服務(wù)git fetch-pack
和git ls-remote
客戶。它是默認(rèn)啟用的,但是一個(gè)版本庫(kù)可以通過設(shè)置daemon.uploadpack
配置項(xiàng)來禁用它false
。
upload-archive
這個(gè)服務(wù)git archive --remote
。它默認(rèn)是禁用的,但是一個(gè)存儲(chǔ)庫(kù)可以通過設(shè)置daemon.uploadarch
配置項(xiàng)來啟用它true
。
receive-pack
這為git send-pack
客戶提供服務(wù),允許匿名推送。它在默認(rèn)情況下是禁用的,因?yàn)?code>no在協(xié)議中有認(rèn)證(換句話說,任何人都可以將任何東西推入存儲(chǔ)庫(kù),包括刪除參考)。這僅適用于每個(gè)人都很友善的封閉局域網(wǎng)環(huán)境。此服務(wù)可通過將daemon.receivepack
配置項(xiàng)目設(shè)置為啟用true
。
我們?cè)? etc / services中假設(shè)如下
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System
git守護(hù)進(jìn)程作為inetd服務(wù)器
要設(shè)置git daemon
一個(gè)inetd服務(wù)來處理列入白名單的目錄集/ pub / foo和/ pub / bar下的任何存儲(chǔ)庫(kù),請(qǐng)?jiān)? etc / inetd中將以下條目全部放在一行中:
git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --export-all /pub/foo /pub/bar
git守護(hù)程序作為虛擬主機(jī)的inetd服務(wù)器
要設(shè)置git daemon
為處理不同虛擬主機(jī)的存儲(chǔ)庫(kù)的inetd服務(wù),www.example.com
并在一行中www.example.org
放入類似下面的條目/etc/inetd
:
git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --export-all --interpolated-path=/pub/%H%D /pub/www.example.org/software /pub/www.example.com/software /software
在此示例中,根級(jí)目錄/pub
將包含所支持的每個(gè)虛擬主機(jī)名的子目錄。此外,兩臺(tái)主機(jī)都簡(jiǎn)單地將存儲(chǔ)庫(kù)發(fā)布為git://www.example.com/software/repo.git
。對(duì)于1.4.0之前的客戶端,/software
也可以創(chuàng)建符合鏈接到相應(yīng)的默認(rèn)存儲(chǔ)庫(kù)。
git守護(hù)程序作為虛擬主機(jī)的常規(guī)守護(hù)程序
要設(shè)置git daemon
為基于其IP地址處理多個(gè)虛擬主機(jī)的存儲(chǔ)庫(kù)的常規(guī)非inetd服務(wù),請(qǐng)像下面這樣啟動(dòng)守護(hù)進(jìn)程:
git daemon --verbose --export-all --interpolated-path=/pub/%IP/%D /pub/192.168.1.200/software /pub/10.10.220.23/software
在本例中,根級(jí)目錄/pub
將包含每個(gè)支持的虛擬主機(jī)IP地址的子目錄。盡管存儲(chǔ)庫(kù)仍然可以通過主機(jī)名訪問,但前提是它們與這些IP地址相對(duì)應(yīng)。
選擇性啟用/禁用每個(gè)存儲(chǔ)庫(kù)的服務(wù)
要啟用git archive --remote
和禁用git fetch
存儲(chǔ)庫(kù),請(qǐng)?jiān)诖鎯?chǔ)庫(kù)中的配置文件(即,和)config
旁邊的文件中包含以下內(nèi)容。HEADrefsobjects
[daemon] uploadpack = false uploadarch = true
git daemon
如果IP地址可用,會(huì)將REMOTE_ADDR設(shè)置為與其連接的客戶端的IP地址。REMOTE_ADDR將在服務(wù)執(zhí)行時(shí)調(diào)用的掛鉤環(huán)境中可用。