簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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

更新索引檔案中已檢出條目的統計資訊。

-q
--quiet

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

-f
--force

強制覆蓋現有檔案

-a
--all

檢出索引中的所有檔案,但那些設定了 skip-worktree 位的檔案除外(參見 --ignore-skip-worktree-bits)。不能與顯式檔名一起使用。

-n
--no-create

不檢出新檔案,只重新整理已檢出的檔案。

--prefix=<string>

建立檔案時,在檔名前加上 <string>(通常是包含尾部斜槓的目錄)

--stage=<number>|all

不是檢出未合併的條目,而是從指定階段複製檔案。<number> 必須在 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 將為每個正在檢出的索引條目建立一個臨時檔案。索引不會更新統計資訊。如果呼叫者需要所有未合併條目的所有階段,以便外部合併工具可以處理未合併的檔案,則這些選項會很有用。

一個列表將被寫入標準輸出,提供臨時檔名與跟蹤路徑名的關聯。列表格式有兩種變體:

  1. 臨時檔名 TAB 路徑 RS

    第一種格式用於當省略 --stage 或其值不是 --stage=all 時。欄位 tempname 是儲存檔案內容的臨時檔名,而 path 是索引中的跟蹤路徑名。只輸出請求的條目。

  2. 階段1臨時檔案 SP 階段2臨時檔案 SP 階段3臨時檔案 TAB 路徑 RS

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

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

如果複製到臨時檔案的物件是符號連結,則連結的內容將寫入普通檔案。終端使用者或 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