設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.44.1 → 2.49.1 無更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 無更改
-
2.43.0
2023-11-20
- 2.37.3 → 2.42.4 無更改
-
2.37.2
2022-08-11
- 2.22.1 → 2.37.1 無更改
-
2.22.0
2019-06-07
- 2.17.1 → 2.21.4 無變更
-
2.17.0
2018-04-02
- 2.10.5 → 2.16.6 無更改
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 無變更
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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>]]] [--log-destination=
(stderr
|syslog
|none
)] [<directory>…]
描述
一個非常簡單的 TCP Git 守護程序,通常監聽埠“DEFAULT_GIT_PORT”,即 9418。它等待客戶端請求服務,如果該服務已啟用,它將提供該服務。
它會驗證目錄是否包含特殊檔案“git-daemon-export-ok”,並且它會拒絕匯出任何未顯式標記為可匯出的 Git 目錄(除非指定了 --export-all
引數)。如果你將一些目錄路徑作為 git
daemon
引數傳遞,則提供的倉庫僅限於這些目錄內的倉庫。
預設情況下,僅啟用 upload-pack
服務,該服務為 git
fetch-pack
和 git
ls-remote
客戶端提供服務,這些客戶端由 git
fetch
、git
pull
和 git
clone
呼叫。
這非常適合只讀更新,即從 Git 倉庫拉取內容。
還存在一個 upload-archive
服務,用於為 git
archive
提供服務。
選項
--strict-paths
-
精確匹配路徑(即,當真實路徑是“/foo/repo.git”或“/foo/repo/.git”時,不允許“/foo/repo”)且不執行使用者相對路徑。當啟用此選項且未提供目錄引數時,
git
daemon
將拒絕啟動。 --base-path=
<path>-
將所有路徑請求重新對映為相對於給定路徑。這類似於“Git 根目錄”——如果你在
example.com
上執行git
daemon
並使用--base-path=/srv/git
,那麼當你稍後嘗試從git://example.com/hello.git
拉取時,git
daemon
會將路徑解釋為/srv/git/hello.git
。 --base-path-relaxed
-
如果啟用了
--base-path
且倉庫查詢失敗,則使用此選項,git
daemon
將嘗試不帶字首地查詢基礎路徑。這對於切換到--base-path
用法很有用,同時仍允許舊路徑。 --interpolated-path=
<pathtemplate>-
為了支援虛擬主機,可以使用插入路徑模板來動態構建備用路徑。該模板支援
%H
表示客戶端提供的目標主機名(轉換為全小寫),%CH
表示規範主機名,%IP
表示伺服器的 IP 地址,%P
表示埠號,以及%D
表示指定倉庫的絕對路徑。插入後,路徑會根據目錄列表進行驗證。 --export-all
-
允許從所有看起來像 Git 倉庫的目錄(擁有 objects 和 refs 子目錄)拉取,即使它們沒有
git-daemon-export-ok
檔案。 --inetd
-
將伺服器作為 inetd 服務執行。隱含
--syslog
(可以透過--log-destination=
覆蓋)。與--detach
、--port
、--listen
、--user
和--group
選項不相容。 --listen=
<host-or-ipaddr>-
監聽指定的 IP 地址或主機名。如果支援,IP 地址可以是 IPv4 地址或 IPv6 地址。如果不支援 IPv6,則
--listen=
<hostname> 也不受支援,--listen
必須給定一個 IPv4 地址。可以多次給定。與--inetd
選項不相容。 --port=
<n>-
監聽備用埠。與
--inetd
選項不相容。 --init-timeout=
<n>-
從連線建立到收到客戶端請求之間的超時時間(以秒為單位)(通常是一個相當低的值,因為這應該基本是即時的)。
--timeout=
<n>-
特定客戶端子請求的超時時間(以秒為單位)。這包括伺服器處理子請求所需的時間以及等待下一個客戶端請求的時間。
--max-connections=
<n>-
最大併發客戶端數量,預設為 32。設定為零表示無限制。
--syslog
-
--log-destination=syslog
的簡寫。 --log-destination=
<destination>-
將日誌訊息傳送到指定的目標。請注意,此選項不隱含
--verbose
,因此預設情況下僅記錄錯誤情況。<destination> 必須是以下之一:如果指定了
--inetd
或--detach
,預設目標是syslog
,否則是stderr
。 --user-path
--user-path=
<path>-
允許在請求中使用 ~user 表示法。當不帶引數指定時,對 git://host/~alice/foo 的請求被視為訪問使用者
alice
主目錄中的 foo 倉庫的請求。如果指定了--user-path=
<path>,則相同的請求被視為訪問使用者alice
主目錄中的 <path>/foo
倉庫的請求。 --verbose
-
記錄有關傳入連線和請求檔案的詳細資訊。
--reuseaddr
-
在繫結監聽套接字時使用
SO_REUSEADDR
。這允許伺服器重啟而無需等待舊連線超時。 --detach
-
從 shell 分離。隱含
--syslog
。 --pid-file=
<file>-
將程序 ID 儲存到 <file> 中。當守護程序在
--inetd
下執行時,此選項將被忽略。 --user=
<user>--group=
<group>-
在進入服務迴圈之前更改守護程序的 uid 和 gid。如果僅給出
--user
而沒有--group
,則使用該使用者的主組 ID。選項的值將傳遞給getpwnam
(3
) 和getgrnam
(3
),不支援數字 ID。將這些選項與
--inetd
一起使用會報錯;如果需要,請在啟動git
daemon
之前使用 inet 守護程序的功能來實現相同目的。與許多切換使用者 ID 的程式一樣,當守護程序執行 Git 程式(例如
upload-pack
和receive-pack
)時,它不會重置HOME
等環境變數。使用此選項時,你可能還希望在啟動守護程序之前設定並匯出HOME
指向 <user> 的主目錄,並確保該目錄中的任何 Git 配置檔案可被 <user> 讀取。 --enable=
<service>--disable=
<service>-
預設情況下在全站啟用/停用服務。請注意,如果服務被標記為可覆蓋並且倉庫透過配置項啟用了該服務,則全站停用的服務仍然可以針對每個倉庫啟用。
--allow-override=
<service>--forbid-override=
<service>-
允許/禁止使用每個倉庫的配置覆蓋全站預設設定。預設情況下,所有服務都可以被覆蓋。
--informative-errors
--no-informative-errors
-
當啟用資訊性錯誤時,git-daemon 將向客戶端報告更詳細的錯誤,區分諸如“無此倉庫”和“倉庫未匯出”等情況。這對於客戶端來說更方便,但可能會洩露有關未匯出倉庫存在的資訊。當未啟用資訊性錯誤時,所有錯誤都會向客戶端報告“訪問被拒絕”。預設是
--no-informative-errors
。 --access-hook=
<path>-
每當客戶端連線時,首先執行由 <path> 指定的外部命令,並將服務名稱(例如“upload-pack”)、倉庫路徑、主機名(
%H
)、規範主機名(%CH
)、IP 地址(%IP
)和 TCP 埠(%P
)作為其命令列引數。外部命令可以透過以非零狀態退出(或以零狀態退出以允許服務)來決定拒絕服務。它還可以檢視 $REMOTE_ADDR 和$REMOTE_PORT
環境變數,以便在做出此決定時瞭解請求者。外部命令可以選擇性地向其標準輸出寫入一行內容,當它拒絕服務時,該內容將作為錯誤訊息傳送給請求者。
- <directory>
-
其餘引數提供目錄列表。如果指定了任何目錄,則
git-daemon
程序將僅當請求的目錄包含在這些目錄之一時才提供服務。如果指定了--strict-paths
,則請求的目錄必須與這些目錄之一精確匹配。
服務
這些服務可以使用此命令的命令列選項進行全域性啟用/停用。如果需要更精細的控制(例如,僅允許對守護程序服務的少數選定倉庫執行 git
archive
),則可以使用每個倉庫的配置檔案來啟用或停用它們。
- upload-pack
-
此服務為
git
fetch-pack
和git
ls-remote
客戶端提供服務。它預設啟用,但倉庫可以透過將daemon.uploadpack
配置項設定為false
來停用它。 - upload-archive
-
此服務為
git
archive
--remote
提供服務。它預設停用,但倉庫可以透過將daemon.uploadarch
配置項設定為true
來啟用它。 - receive-pack
-
此服務為
git
send-pack
客戶端提供服務,允許匿名推送。它預設停用,因為協議中沒有身份驗證(換句話說,任何人都可以將任何內容推送到倉庫中,包括刪除引用)。這僅適用於所有人都友好的封閉區域網環境。可以透過將daemon.receivepack
配置項設定為true
來啟用此服務。
示例
- 我們假設 /etc/services 中包含以下內容
-
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System
- 作為 inetd 伺服器的 git daemon
-
要將 git daemon 設定為處理
/pub/foo
或/pub/bar
中任何倉庫的 inetd 服務,請將以下條目全部寫在一行中,放入/etc/inetd
:git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --export-all /pub/foo /pub/bar
- 作為虛擬主機的 inetd 伺服器的 git daemon
-
要將 git daemon 設定為處理不同虛擬主機(
www.example.com
和www.example.org
)倉庫的 inetd 服務,請將以下條目全部寫在一行中,放入/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
在此示例中,根目錄
/pub
將包含每個受支援虛擬主機名的子目錄。此外,這兩個主機都將倉庫簡單地通告為git://www.example.com/software/repo.git
。對於 1.4.0 之前的客戶端,也可以從/software
建立一個符號連結到相應的預設倉庫。 - 作為虛擬主機的常規守護程序的 git daemon
-
要將
git
daemon
設定為基於 IP 地址處理多個虛擬主機倉庫的常規非 inetd 服務,請按如下方式啟動守護程序:git daemon --verbose --export-all --interpolated-path=/pub/%IP/%D /pub/192.168.1.200/software /pub/10.10.220.23/software
在此示例中,根目錄
/pub
將包含每個受支援虛擬主機 IP 地址的子目錄。不過,倉庫仍然可以透過主機名訪問,前提是它們與這些 IP 地址對應。 - 按倉庫選擇性啟用/停用服務
-
要在倉庫中啟用
git
archive
--remote
並停用git
fetch
,請在倉庫的配置檔案中(即HEAD
、refs 和 objects 旁邊的 config 檔案)新增以下內容。[daemon] uploadpack = false uploadarch = true