24

Git のステージングディレクトリ (Git Index) の命名に混乱しました。

インデックスと呼ぶことに特別な意味はありますか?より簡単に理解できるように、キャッシュ/または一時ディレクトリと呼んでみませんか?

私にとって、インデックスは DBMS でのインデックス作成のように、物事をより速く検索するのに役立つ sth です。ステージング領域とどのように関連していますか?

私はいくつかのグーグル検索を行いましたが、まだよくわかりません。参照リンクGit インデックス

4

1 に答える 1

27

メインのGit メンテナーである Junio C. Hamano による記事は、キャッシュとインデックスの違いを理解するために有益です:
(強調は私のもの)

Linus が git を書き始めたとき、彼の目的は、BitKeeper の時代以前に使用していたオリジナルの「tarball とパッチ」ワークフローによって生成されたすべての中間状態を再現できるようにすることでした。
2.6.12 tarball から始めて、パッチ 1、パッチ 2、... をキューに入れるので、2.6.12 自体、パッチ 1 が適用された 2.6.12、パッチ 1 とパッチ 2 の両方が適用された 2.6.12、 3つのバージョンになります。

しかし、1日に何百ものパッチをシャッフルしなければならない場合、これは明らかに拡張できません. そこで彼は「ディレクトリキャッシュ」を発明しました。概念として、これは今日の git の「ツリー」オブジェクトにほぼ対応しています。レコードのコレクションであり、それぞれがディレクトリ構造全体に含まれるものをコンパクトに表現したものです。
それを構築する方法は、「コンテンツをキャッシュに追加するか、キャッシュ内のコンテンツを更新する」ことでした。

このようなバージョン コントロール レコードのコレクションをホストするコントロール ディレクトリの名前は " .dircache" でした (これはしばらくして " .git" に名前が変更されました)。
" " というファイルがあり.dircache/index、このファイルの内容が読み取られ、名詞 " " にちなんで名付けられた C の一連の変数で操作されましたcache
当時、私たちが現在インデックスと呼んでいる、ツリー オブジェクトとして書き出すコンテンツのコレクションを構築するためのバッファ領域の概念は、「キャッシュ」と呼ばれていました。「 」の内容を記録するファイルが「 」と名付けられ
たため、誰もが「キャッシュ」と「インデックス」を同じ意味で話していました。cacheindex

コードをまったく読まなくても git を使い始める人が増えるにつれて、「インデックス」という言葉の使用は明らかな理由でより一般的になりました。
ファイルシステム上にあるものとして、C ソース コードの変数名よりもはるかに目立ちます。
最終的に、エンドユーザーとしての git の使用を説明する際に、「キャッシュ」を名詞として使用して「インデックス」と呼ぶものを今日使用するのをやめました。
ただし、「キャッシュ」という言葉は、git の実装について議論する文脈で内部データ構造について話したい場合に、依然として名詞として使用されます(たとえば、「プログラムが複数のキャッシュを同時に操作できるようにしましょう」など)。 )。

エンド ユーザー レベルでは、最近では「キャッシュ」は形容詞としてのみ使用されます。「キャッシュされた」は、「作業ツリーのコンテンツではなく、インデックスにキャッシュされたコンテンツ」を意味します。
「インデックス化された」と呼ぶこともできましたが、「キャッシュされたコンテンツ」は、まさにその概念を意味する非常に早い時期からすでに確立されたフレーズであり、同じことを意味する別の単語は必要ありませんでした.

[...] 以前は、「インデックスに新しいファイルを追加する」ことと「インデックスに既にあるファイルを新しい内容で更新する」ことは区別されていました。
[...] git の現代 (および中世) バージョンはgit add両方に " " を使用します。正直に言って、インデックスを更新または追加する行為を「add」と呼ぶこともできましたが、「git トレーニング」業界の一部の人々は、インデックスを「次のコミットのステージング領域」として教え始めました。必然的な結果として、「to stage」という動詞が多くのドキュメントに登場し始め、「コンテンツをインデックスに追加する行為」を意味するようになりました。
私自身も時々この動詞を使用しますが、それは聴衆がこれらの新しい人々から最初に git を学んだ可能性があると思われる場合のみです。

于 2011-07-16T14:53:01.527 に答える