2017-04-05 10 views
0

git checkout-indexコマンドは、ファイルをインデックスから作業ツリーにコピーします。`git checkout-index -u`や` --index`は何をしますか?

-u
--index
インデックス内のチェックアウトされたエントリの更新のstat情報:

ドキュメントは、その-uまたは--indexコマンドラインパラメータについて不可解な発言を含みファイル。

「統計情報」とは何ですか?それを更新すると更新しないことの違いは何ですか?

単純な実験では、git checkout-indexは、期待通りにファイルを作業ツリーに書き込みます。 -u/--indexを使用していて、それを使用していないことに違いはありません。

+0

'.git/index'のmtimeが変更されていますか? –

答えて

2

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を与えることができます。

関連する問題