git-checkout-index
コピーデータインデックスからに作業ツリー。 git-update-index
メタデータをから作業ツリー〜にコピーします。
これらは、具体的に何をすべきかを指示する必要がある低レベルのコマンドです。
このオプションはまったく存在しません。ユーザーインターフェースのデザイン gitのインデックスが、操作が実行された後の作業ツリーの一貫したビューを確実に反映するのに便利なオプションです。
特に、がでないメタデータをgitリポジトリに追加しますが、ファイルが変更されていないかどうかを判断するために使用されます。 How to get a human-readable dump of .git/index?およびWhat does the git index contain EXACTLY?を参照してください。
415e96cに追加されました。
例として、私はt/t2002-checkout-cache-u.sh
と一緒に、-u
を使わずにコマンドを実行します(これもまた、 "チェックアウトされたエントリのgit update-index --refreshと同じです)。 。
1)の調製:
echo frotz >path0 &&
git update-index --add path0 &&
t=$(git write-tree)
2)-uことなく、Gitのチェックアウトインデックス汚れは、情報の状態を取得します。デフファイルの
rm -f path0 &&
git read-tree $t &&
git checkout-index -f -a &&
git diff-files --exit-code
出力:
:100644 100644 8e4020bb5a8d8c873b25de15933e75cc0fc275df 0000000000000000000000000000000000000000 M path0
--> 1
がインデックスに何を参照してください。
$ git ls-files --debug
path0
ctime: 0:0
mtime: 0:0
dev: 0 ino: 0
uid: 0 gid: 0
size: 0 flags: 0
3)-uで、Gitのチェックアウト・インデックスは新しいファイルからのstat情報をピックアップ。
rm -f path0 &&
git read-tree $t &&
git checkout-index -u -f -a &&
git diff-files --exit-code
今(戻り0)
STAT(2)がある。
別に記録されるSTAT情報から
$ git ls-files --debug
path0
ctime: 1491479474:0
mtime: 1491479474:0
dev: 16777220 ino: 50556411
uid: 501 gid: 20
size: 6 flags: 0
、出力中の1つの興味深いビットがあります。 git-diff-files
は、作業ツリーとインデックスに違いがあると言うのはなぜですか?
マニュアルは、出力のフィールドは "DST" の
SHA1であることを述べています。 0 {40}が作成された場合、結合解除されているか、「作業ツリーを見てください」。
< sha1>はファイルがファイルシステム上で新規で、インデックスと同期していない場合はすべて0と表示されます。
このテストケースは、gitがメタデータ情報を使用する1つの方法を示しています。作業ツリー内のファイルとインデックスを比較するとき。統計情報が古い(またはすべてゼロ)の場合、ファイルが変更されている可能性があります。 git-read-tree
は作業ツリーではなくインデックスのみに書き込むため、必ず統計情報が無効になります。統計情報が有効であれば、git-diff-files
は確実にそのエントリのブロブIDを与えることができます。
'.git/index'のmtimeが変更されていますか? –