2016-09-13 4 views
0

私はgit update-indexのmanページを見てきました。私は単純に-gが渡されたときの動作を理解していません。このオプションは、HEADとは異なるインデックス内のファイルを選択します。しかし、それらのファイルには何が行われますか?「git update-index -g」と他のオプションは全く同じですか?

インターネットでの議論は、多くの場合、--assume-unchangedですが、基本的な機能を理解したいと思います。

P .:私はインデックスが何であるか、つまりgit addgit resetの仕組みを理解していると思います。

答えて

2

マニュアルページを読んでから、何もしません。ので:

Modifies the index or directory cache. Each file mentioned is updated 
    into the index and any unmerged or needs updating state is cleared. 

何のファイル引数がない場合は、「各ファイルは、」空のセットである、と私は空のケースに割り当てられている任意の場所にその特別な意味を見つけることができません。

しかし、git update-indexそれはGitのレポにあるかどうかを確認ん

~$ git update-index 
fatal: Not a git repository (or any of the parent directories): .git 
~$ echo $? 
128 

したがって、引数なしでgit update-index少なくとも健全性チェックを実行し、エラーメッセージと終了ステータスを提供します。実際に何もしなければ、gitリポジトリにあるかどうかをチェックするためのスクリプトで使用できます。あなたに気をつけてください。他のコマンドは引数なしでgit rev-parseのようになります。

「引数はありませんが、ファイル引数がありません」という意味の場合は、の場合は、既にgitにある指定されたファイルの処理を実行します。追跡されていないファイルであるファイル引数を検出すると、--addが指定されていないため、エラー診断が行われます。失敗した終了ステータスで終了し、索引は変更されません。

基本的にオプションがないと、指定されたすべてのファイルを操作できるか、何も処理せずに何もしません。これにより、インテントがトラッキングされたファイルに対してのみ動作するような状況が防止されます。 -g/--again

目的は、すでに修正して、上演されたファイルにgit update-indexを繰り返す方法を提供することです。これらのファイルでは、索引が作業コピーに一致するようにファイルを再度更新します。

HEADコミット、ステージングされたインデックス、および作業コピーで、特定のファイルが異なる状況が発生する可能性があります。これは、ファイルをハックしてgit add(またはgit update-index)でステージングすると発生します。その時点で、インデックスは作業コピーと同じです。あなたはそれを再びハックします。今はインデックスと異なり、それはHEADとは異なります。それを再びインデックスに更新すると、インデックスが作業コピーと同期されるので、唯一の違いはHEADです。

git diffを実行すると、作業ファイルとインデックスを比較することに注意してください。インデックスとHEADの差異を確認するには、git diff --cachedを、対処方法git diff HEADを実行します。したがって、あなたはファイルをハックしてからそれをステージングし、再びそれをハックします。git diffは、ステージと作業の間のちょうど最新のハックを表示します。オリジナルのハックはgit diff --cachedであり、全体的な複合ハックはgit diff HEADです。これを武器に、git update-indexの効果を調べることができます。

-gは、ファイル引数で有用であると思われる:git update-index -g file-j file-k手段「の修正を上演しているすべてのものの上にupdate-indexを行うも、新たにハッキングfile-jfile-kでそれを行います。」

+0

ありがとうございます。 「インデックスに再び更新することで、インデックスを作業コピーと同期させる」ということは、まさに私が理解していなかったことです。 – Arkadiy

関連する問題