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

不是將檔案複製到工作目錄,而是將內容寫入臨時檔案。臨時檔名關聯將寫入 stdout。

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

將向 stdout 寫入一個列表,提供臨時檔名與跟蹤路徑名的關聯。列表格式有兩種變體

  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,則為 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] 套件的一部分