Git
English ▾ トピック ▾ 最新バージョン ▾ 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=<文字列>

ファイルを作成するときに、<文字列>(通常、末尾に/を含むディレクトリ)を先頭に追加します

--stage=<番号>|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