設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes
- 命令列介面規範
- Git 日常使用
- 常見問題 (FAQ)
- 詞彙表
- 掛鉤 (Hooks)
- gitignore
- gitmodules
- 修訂版本 (Revisions)
- 子模組
- 教學
- 工作流程
- 所有指南...
管理
底層命令 (Plumbing Commands)
- 2.43.1 → 2.55.0 無變更
-
2.43.0
2023-11-20
- 2.36.1 → 2.42.4 無變更
-
2.36.0
2022-04-18
- 2.1.4 → 2.35.8 無變更
-
2.0.5
2014-12-17
概要
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=<字串>
-
建立檔案時,於前方加上 <字串>(通常是一個包含結尾 / 的目錄)
- --stage=<數字>|all
-
不要簽出未合併 (unmerged) 的項目,而是從指定的階段 (stage) 複製檔案。<數字> 必須介於 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。
此處的目標不是直覺性,而是可重複性。「無參數即無工作」這種行為的原因在於,您在指令稿 (scripts) 中應該能夠執行:
$ 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) 資訊更新。如果呼叫者需要未合併項目的所有階段,以便將這些檔案交由外部合併工具處理,這些選項將非常有用。
輸出將會寫入至 stdout,提供暫存檔名與追蹤路徑名稱的關聯。輸出格式有兩種變化:
-
tempname TAB path RS
第一種格式在省略
--stage或未設為--stage=all時使用。tempname 欄位是存放檔案內容的暫存檔名,path 是索引中追蹤的路徑名稱。僅輸出所請求的項目。 -
stage1temp SP stage2temp SP stage3tmp TAB path RS
第二種格式在設為
--stage=all時使用。三個階段暫存欄位(stage1temp, stage2temp, stage3temp)列出對應階段的暫存檔名,若索引中該階段無項目則為.。僅有第 0 階段 (stage 0) 的路徑將永遠不會出現在輸出中。
在兩種格式中,RS(記錄分隔符)預設為換行字元,但若命令列傳入了 -z 參數,則會改為 Null 字元。暫存檔名永遠是安全的字串;它們絕不會包含目錄分隔符或空白字元。path 欄位永遠是相對於目前目錄,而暫存檔名永遠是相對於頂層目錄。
如果被複製到暫存檔的物件是符號連結,連結的內容將被寫入到一個一般檔案中。最終使用者或上層工具 (Porcelain) 應自行決定如何利用此資訊。
範例
- 更新並重新整理僅已簽出的檔案
-
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
- 使用 git checkout-index 來「匯出整個樹狀目錄」
-
prefix 功能基本上讓使用 git checkout-index 作為「匯出為樹狀目錄」功能變得相當簡單。只需將所需的樹狀目錄讀入索引,並執行:
$ git checkout-index --prefix=git-export-dir/ -a
gitcheckout-index將會把索引「匯出」到指定的目錄。最後的「/」很重要。匯出的名稱字面上僅是在前面加上指定的字串。請參考以下範例作為對照。
- 以字首匯出檔案
-
$ git checkout-index --prefix=.merged- Makefile
這會將目前快取的
Makefile副本簽出為.merged-Makefile檔案。
GIT
git[1] 套件的一部分