Git
English ▾ 主題 ▾ 最新版本 ▾ git-checkout-index 最後更新於 2.43.0

名稱

git-checkout-index - 從索引複製檔案到工作樹

概要

git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
		   [--stage=<number>|all]
		   [--temp]
		   [--ignore-skip-worktree-bits]
		   [-z] [--stdin]
		   [--] [<file>…​]

描述

將所有列出的檔案從索引複製到工作目錄(不會覆寫現有檔案)。

選項

-u
--index

更新索引檔中已簽出條目的 stat 資訊。

-q
--quiet

如果檔案存在或不在索引中,則保持安靜。

-f
--force

強制覆寫現有檔案。

-a
--all

簽出索引中的所有檔案,除了那些設定了 skip-worktree 位元的檔案(請參閱 --ignore-skip-worktree-bits)。不能與明確的檔案名稱一起使用。

-n
--no-create

不要簽出新檔案,僅更新已簽出的檔案。

--prefix=<字串>

在建立檔案時,在前面加上 <字串>(通常是包含尾隨 / 的目錄)。

--stage=<數字>|all

不要簽出未合併的條目,而是從指定的階段複製檔案。<數字> 必須介於 1 和 3 之間。注意:--stage=all 會自動暗示 --temp。

--temp

不要將檔案複製到工作目錄,而是將內容寫入臨時檔案。臨時名稱關聯將被寫入標準輸出。

--ignore-skip-worktree-bits

簽出所有檔案,包括那些設定了 skip-worktree 位元的檔案。

--stdin

不要從命令列取得路徑列表,而是從標準輸入讀取路徑列表。路徑預設以 LF 分隔(即每行一個路徑)。

-z

僅在與 --stdin 一起使用時才有意義;路徑以 NUL 字元而非 LF 分隔。

--

不要將任何其他引數解讀為選項。

使用標記的順序曾經很重要,但現在不再重要。

僅執行 git checkout-index 不會執行任何操作。您可能指的是 git checkout-index -a。如果您想要強制執行,則需要 git checkout-index -f -a

直觀性不是這裡的目標。可重複性才是。 「沒有引數表示沒有工作」的行為原因是,從腳本中,您應該能夠執行

$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --

這將強制所有現有的 *.h 檔案被其快取副本取代。如果空的命令列暗示「全部」,那麼這將強制重新整理索引中的所有內容,這不是重點。但是由於 *git checkout-index* 接受 --stdin,因此使用以下命令會更快

$ find . -name '*.h' -print0 | git checkout-index -f -z --stdin

當您知道其餘的將是檔案名稱時,-- 只是個好主意;它將防止使用例如 -a 的檔案名稱時出現問題。在腳本中使用 -- 可能是一個好策略。

使用 --temp 或 --stage=all

當使用 --temp(或由 --stage=all 暗示)時,*git checkout-index* 會為每個要簽出的索引條目建立一個臨時檔案。索引不會更新 stat 資訊。如果呼叫者需要所有未合併條目的所有階段,以便可以使用外部合併工具處理未合併的檔案,則這些選項可能很有用。

將會在標準輸出中寫入一個列表,提供臨時檔案名稱與追蹤路徑名稱的關聯。列表格式有兩種變體

  1. tempname TAB path RS

    第一種格式是在省略 --stage 或不是 --stage=all 時使用的格式。欄位 tempname 是包含檔案內容的臨時檔案名稱,而 path 是索引中追蹤的路徑名稱。僅輸出請求的條目。

  2. stage1temp SP stage2temp SP stage3tmp TAB path RS

    第二種格式是在使用 --stage=all 時使用的格式。三個階段臨時欄位 (stage1temp、stage2temp、stage3temp) 列出臨時檔案的名稱(如果在索引中有階段條目),或者如果沒有階段條目則列出 .。輸出中將始終省略僅具有階段 0 條目的路徑。

在兩種格式中,RS(記錄分隔符)預設是換行符,但如果命令列中傳遞了 -z,則為空位元組。臨時檔案名稱始終是安全的字串;它們永遠不會包含目錄分隔符或空白字元。路徑欄位始終相對於目前目錄,而臨時檔案名稱始終相對於頂層目錄。

如果複製到臨時檔案的物件是符號連結,則連結的內容將被寫入到普通檔案中。這取決於最終使用者或 Porcelain 來利用此資訊。

範例

更新和僅重新整理已簽出的檔案
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
使用 *git checkout-index* 來「匯出整個樹」

前綴能力基本上使得使用 *git checkout-index* 作為「匯出為樹」函數變得微不足道。只需將所需的樹讀入索引,然後執行

$ git checkout-index --prefix=git-export-dir/ -a

git checkout-index 將把索引「匯出」到指定的目錄。

最後的 "/" 很重要。匯出的名稱實際上只是以指定的字串作為前綴。將此與以下範例進行對比。

匯出帶有前綴的檔案
$ git checkout-index --prefix=.merged- Makefile

這將把目前快取的 Makefile 副本簽出到 .merged-Makefile 檔案中。

GIT

git[1] 套件的一部分

scroll-to-top