設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes
- 命令列介面規範
- Git 日常使用
- 常見問題 (FAQ)
- 詞彙表
- 掛鉤 (Hooks)
- gitignore
- gitmodules
- 修訂版本 (Revisions)
- 子模組
- 教學
- 工作流程
- 所有指南...
管理
底層命令 (Plumbing Commands)
- 2.50.1 → 2.55.0 無變更
-
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
概要
gitdaemon[--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 守護程式 (daemon),預設監聽連接埠 "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 儲存庫進行拉取 (pull)。
同時也存在一個 upload-archive 服務,用於為 git archive 提供服務。
選項
--strict-paths-
精確比對路徑(即當實際路徑為 "/foo/repo.git" 或 "/foo/repo/.git" 時,不允許存取 "/foo/repo"),且不處理相對於使用者的路徑。當啟用此選項且未提供目錄引數時,
gitdaemon將拒絕啟動。 --base-path=<路徑>-
將所有路徑請求重新對應為相對於給定路徑的路徑。這相當於「Git 根目錄」——如果您在
example.com上以--base-path=/srv/git執行gitdaemon,那麼當您嘗試從git://example.com/hello.git拉取時,gitdaemon會將該路徑解釋為/srv/git/hello.git。 --base-path-relaxed-
如果啟用了
--base-path但儲存庫查詢失敗,使用此選項時,gitdaemon將嘗試在不加上基底路徑字首的情況下進行查詢。這對於轉換到--base-path使用方式,同時仍允許舊路徑存取非常有用。 --interpolated-path=<路徑樣板>-
為了支援虛擬主機,可以使用插入路徑樣板來動態建構替代路徑。樣板支援:
%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=<主機或IP位址>-
監聽特定的 IP 位址或主機名稱。如果支援,IP 位址可以是 IPv4 或 IPv6 位址。如果 IPv6 不受支援,則不支援
--listen=<主機名稱>,且--listen必須提供 IPv4 位址。此選項可以多次使用。與--inetd選項不相容。 --port=<n>-
在替代連接埠上監聽。與
--inetd選項不相容。 --init-timeout=<n>-
從建立連線到收到客戶端請求之間的逾時時間(以秒為單位,通常這個值較低,因為請求應該是立即的)。
--timeout=<n>-
特定客戶端子請求的逾時時間(以秒為單位)。這包括伺服器處理子請求所需的時間,以及等待下一個客戶端請求的時間。
--max-connections=<n>-
並發客戶端的最大數量,預設為 32。設為 0 表示不限制。
--syslog-
--log-destination=syslog的簡寫。 --log-destination=<目的地>-
將日誌訊息發送到指定目的地。請注意,此選項不隱含
--verbose,因此預設僅記錄錯誤狀況。<目的地> 必須是以下之一:如果指定了
--inetd或--detach,預設目的地為syslog,否則為stderr。 --user-path--user-path=<路徑>-
允許在請求中使用 ~user 記法。當未指定參數時,對 git://host/~alice/foo 的請求被視為存取使用者
alice家目錄中 foo 儲存庫的請求。如果指定了--user-path=<路徑>,則同樣的請求被視為存取使用者alice家目錄中 <路徑>/foo儲存庫的請求。 --verbose-
記錄關於傳入連線和請求檔案的詳細資訊。
--reuseaddr-
在繫結監聽 Socket 時使用
SO_REUSEADDR。這允許伺服器重新啟動,而不必等待舊的連線逾時。 --detach-
從 Shell 脫離 (detach)。隱含
--syslog。 --pid-file=<檔案>-
將行程 ID 儲存於 <檔案> 中。在
--inetd下執行時此選項會被忽略。 --user=<使用者>--group=<群組>-
在進入服務迴圈前更改守護程式的 UID 和 GID。僅指定
--user而不指定--group時,會使用該使用者的主要群組 ID。選項的值會傳遞給getpwnam(3) 和getgrnam(3),不支援使用數字 ID。與
--inetd一起使用這些選項是錯誤的;如果需要,請利用 inet 守護程式的功能在衍生gitdaemon之前達成相同目的。與許多切換使用者 ID 的程式一樣,守護程式在執行 git 程式(例如
upload-pack和receive-pack)時不會重設環境變數(如HOME)。使用此選項時,您可能還需要在啟動守護程式之前,設定並匯出HOME指向 <使用者> 的家目錄,並確保該目錄中的任何 Git 設定檔對 <使用者> 是可讀的。 --enable=<服務>--disable=<服務>-
預設在全站範圍內啟用/停用服務。請注意,在全站停用的服務,如果標記為可覆寫且儲存庫透過設定項目啟用該服務,仍可在個別儲存庫中啟用。
--allow-override=<服務>--forbid-override=<服務>-
允許/禁止使用個別儲存庫的設定來覆寫全站預設值。預設情況下,所有服務皆可被覆寫。
--informative-errors--no-informative-errors-
當啟用詳盡錯誤訊息時,git-daemon 會向客戶端報告更詳細的錯誤,區分「找不到儲存庫」和「儲存庫未匯出」等情況。這對客戶端較方便,但可能會洩漏關於未匯出儲存庫是否存在的資訊。當未啟用詳盡錯誤訊息時,所有錯誤都會向客戶端回報「存取被拒」。預設值為
--no-informative-errors。 --access-hook=<路徑>-
每當有客戶端連接時,首先執行由 <路徑> 指定的外部指令,並將服務名稱(例如 "upload-pack")、儲存庫路徑、主機名稱 (
%H)、標準主機名稱 (%CH)、IP 位址 (%IP) 以及 TCP 連接埠 (%P) 作為命令列引數。外部指令可以透過以非零狀態退出(或以零狀態退出以允許)來決定是否拒絕服務。它也可以查看 $REMOTE_ADDR 和$REMOTE_PORT環境變數,在做此決定時了解請求者資訊。外部指令可以選擇寫入單行文字到其標準輸出,以便在拒絕服務時將其作為錯誤訊息發送給請求者。
- <目錄>
-
其餘引數提供目錄列表。如果指定了任何目錄,則
git-daemon行程僅會在請求的目錄包含在這些目錄中時才會提供服務。如果指定了--strict-paths,則請求的目錄必須與這些目錄之一完全吻合。
服務 (SERVICES)
這些服務可以使用此指令的命令列選項進行全域啟用/停用。如果需要更精細的控制(例如僅允許 git archive 在少數幾個由守護程式服務的選定儲存庫中執行),可以使用個別儲存庫的設定檔來啟用或停用它們。
- upload-pack
-
此服務為
gitfetch-pack和gitls-remote客戶端提供服務。預設啟用,但儲存庫可透過將daemon.uploadpack設定項目設為false來停用它。 - upload-archive
-
此服務為
gitarchive--remote提供服務。預設停用,但儲存庫可透過將daemon.uploadarch設定項目設為true來啟用它。 - receive-pack
-
此服務為
gitsend-pack客戶端提供服務,允許匿名推送 (push)。預設停用,因為該協定中沒有身分驗證(換句話說,任何人都可以將任何內容推送至儲存庫,包括移除引用 refs)。這僅適用於每個人都是友善的封閉 LAN 環境。此服務可透過將daemon.receivepack設定項目設為true來啟用。
範例
- 我們假設 /etc/services 中存在以下內容:
-
$ grep 9418 /etc/services git 9418/tcp # Git Version Control System
- 將 git daemon 作為 inetd 伺服器
-
若要將 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
- 將 git daemon 作為虛擬主機的 inetd 伺服器
-
若要將 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 作為虛擬主機的一般守護程式
-
若要將
gitdaemon設定為處理多個虛擬主機(基於其 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 位址。 - 選擇性地啟用/停用個別儲存庫服務
-
若要針對某個儲存庫啟用
gitarchive--remote並停用gitfetch,請在儲存庫的設定檔中加入以下內容(該檔案即為HEAD、refs 和 objects 旁的 config 檔案):[daemon] uploadpack = false uploadarch = true
環境變數
git daemon 會將 REMOTE_ADDR 設定為連接到它的客戶端 IP 位址(如果 IP 位址可用)。當執行服務時,REMOTE_ADDR 將可在被呼叫的掛鉤 (hooks) 環境中使用。
GIT
git[1] 套件的一部分