日本語 ▾ トピック ▾ 最新バージョン ▾ 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

マージされていないエントリをチェックアウトする代わりに、指定されたステージからファイルをコピーします。 は1から3の間でなければなりません。注意: --stage=all は自動的に --temp を意味します。

--temp

ファイルをワーキングディレクトリにコピーする代わりに、内容を一時ファイルに書き込みます。一時ファイル名の関連付けは標準出力に書き込まれます。

--ignore-skip-worktree-bits

skip-worktreeビットが設定されているファイルを含め、すべてのファイルをチェックアウトします。

--stdin

コマンドラインからパスのリストを取得する代わりに、標準入力からパスのリストを読み取ります。パスはデフォルトでLF(つまり、1行に1つのパス)で区切られます。

-z

--stdin と一緒に使用した場合にのみ意味があります。パスはLFではなくNUL文字で区切られます。

--

それ以降の引数をオプションとして解釈しません。

以前はフラグの順序が重要でしたが、現在はそうではありません。

単に 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 はチェックアウトされる各インデックスエントリに対応する一時ファイルを作成します。インデックスは統計情報で更新されません。これらのオプションは、呼び出し元がすべてのマージされていないエントリのすべてのステージを必要とし、マージされていないファイルが外部のマージツールで処理できるようにする場合に役立ちます。

一時ファイル名と追跡されたパス名の関連付けを提供するリストが標準出力に書き込まれます。リストの形式には2つのバリエーションがあります。

  1. tempname TAB path RS

    最初の形式は、--stage が省略された場合、または --stage=all でない場合に使用されます。フィールド tempname はファイルの内容を保持する一時ファイル名であり、path はインデックス内の追跡されたパス名です。要求されたエントリのみが出力されます。

  2. stage1temp SP stage2temp SP stage3tmp TAB path RS

    2番目の形式は、--stage=all が使用された場合に使用されます。3つのステージ一時フィールド (stage1temp, stage2temp, stage3temp) は、インデックスにステージエントリがある場合は一時ファイル名を、ステージエントリがない場合は . をリストします。ステージ0エントリのみを持つパスは、常に出力から省略されます。

どちらの形式でも RS(レコードセパレータ)はデフォルトでは改行ですが、コマンドラインで -z が渡された場合はヌルバイトになります。一時ファイル名は常に安全な文字列であり、ディレクトリセパレータや空白文字を含むことはありません。path フィールドは常に現在のディレクトリからの相対パスであり、一時ファイル名は常に最上位ディレクトリからの相対パスです。

一時ファイルにコピーされるオブジェクトがシンボリックリンクである場合、リンクの内容は通常のファイルに書き込まれます。この情報の利用はエンドユーザーまたは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