日本語 ▾ Topics ▾ Latest version ▾ git-checkout-index last updated in 2.43.0

NAME

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 によって区切られます(つまり、1行につき1パス)。

-z

--stdin 使用時にのみ意味があり、パスは LF の代わりに NUL 文字で区切られます。

--

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

以前はフラグの順序が重要でしたが、もはや意味を持ちません。

単に git checkout-index を実行しても何も起こりません。おそらく git checkout-index -a という意味だったのでしょう。強制的に実行する場合は、git checkout-index -f -a を使用してください。

Intuitiveness is not the goal here. Repeatability is. The reason for the "no arguments means no work" behavior is that from scripts you are supposed to be able to do:

$ find . -name '*.h' -print0 | xargs -0 git checkout-index -f --

このコマンドは、既存の全ての *.h ファイルをキャッシュされたコピーに置き換えることを強制します。もし空のコマンドラインが「all」を意味する場合、これはインデックス内の全ファイルをリフレッシュすることになり、目的とは異なります。しかし、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 に出力されます。この一覧の形式には 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

Part of the git[1] suite

scroll-to-top