設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.43.1 → 2.47.0 無變更
-
2.43.0
11/20/23
- 2.36.1 → 2.42.3 無變更
-
2.36.0
04/18/22
- 2.1.4 → 2.35.8 無變更
-
2.0.5
12/17/14
概要
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 資訊。如果呼叫者需要所有未合併條目的所有階段,以便可以使用外部合併工具處理未合併的檔案,則這些選項可能很有用。
將會在標準輸出中寫入一個列表,提供臨時檔案名稱與追蹤路徑名稱的關聯。列表格式有兩種變體
-
tempname TAB path RS
第一種格式是在省略
--stage
或不是--stage=all
時使用的格式。欄位 tempname 是包含檔案內容的臨時檔案名稱,而 path 是索引中追蹤的路徑名稱。僅輸出請求的條目。 -
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] 套件的一部分