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

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

-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

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

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

一時ファイル名と追跡されたパス名の関連付けを提供するリストが標準出力に書き込まれます。リスト形式には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 が渡された場合はヌルバイトになります。一時ファイル名は常に安全な文字列です。ディレクトリセパレータや空白文字は含まれません。パスフィールドは常に現在のディレクトリに対して相対的で、一時ファイル名は常に最上位ディレクトリに対して相対的です。

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

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