SYNOPSIS

git checkout-index [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
                   [--stage=<number>|all]
                   [--temp]
                   [--ignore-skip-worktree-bits]
                   [-z] [--stdin]
                   [--] [<file>…]

DESCRIPTION

リストされているすべてのファイルをインデックスから作業ディレクトリにコピーします(既存ファイルは上書きしません)。

OPTIONS

-u
--index

インデックスファイルのチェックアウトされたエントリの統計情報を更新します。

-q
--quiet

ファイルが存在する場合、またはインデックスにない場合は、静かにする

-f
--force

既存ファイルを強制的に上書きします

-a
--all

skip-worktree ビットが設定されているファイルを除いて、インデックス内のすべてのファイルをチェックアウトします(--ignore-skip-worktree-bits 参照)。 明示的なファイル名(explicit filenames)と一緒に使用することはできません。

-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で区切られます(つまり、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 のファイル名での問題を防ぎます。 スクリプトでは -- を使用することをお勧めします。

Using --temp or --stage=all

--temp が使用されている場合(または --stage=all によって暗黙に指定されている場合)、 git checkout-index は、チェックアウトされているインデックスエントリごとに一時ファイルを作成します。 インデックスの統計情報は更新されません。 これらのオプションは、マージされていないファイルを外部のマージツールで処理できるように、呼び出し元がマージされていないすべてのエントリのすべてのステージを必要とする場合に役立ちます。

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

. tempname TAB path RS

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

. stage1temp SP stage2temp SP stage3tmp TAB path RS

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

どちらの形式でも、RS(レコード区切り文字)はデフォルトでは改行ですが、コマンドラインで -z が渡された場合はヌルバイトになります。一時ファイル名は常に安全な文字列(safe strings)で、ディレクトリ区切り文字や空白文字が含まれることはありません。pathフィールドは常に現在のディレクトリを基準にしており、一時ファイル名は常に最上位ディレクトリを基準にしています。

一時ファイルにコピーされるオブジェクトがシンボリックリンクである場合、リンクの内容は通常のファイルに書き込まれます。 この情報を利用するのはエンドユーザーまたは磁器コマンドの責任です。

EXAMPLES

すでにチェックアウトされているファイルのみをupdateおよびrefreshするには
$ 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

Part of the git(1) suite