2

Git がブランチからのすべてのデータをどこに保存するのか疑問に思っていました。ブランチを切り替えるたびに、すべてのデータが元の場所に戻され、別の特定のブランチからのデータが削除されます。

低速の CPU/HDD では、別のブランチからデータを戻すのに時間がかかりますか? 内部はどのように機能しますか?

4

1 に答える 1

3

Git はファイル データを「blob」と呼ばれるオブジェクトに保存します。これらは.git/objects、リポジトリ内のディレクトリに格納されます。

ディレクトリ構造へのブロブのマッピングは、再帰的な「ツリー」と呼ばれるオブジェクトによって行われます。サブディレクトリの場合、1 つのツリーが他のツリーを参照できます。

コミットは、コミット時のリポジトリのルート ディレクトリの状態である特定のツリーを参照します。

ブランチは、特定のコミットへの単なるポインターです。

ブランチをチェックアウトすると、Git はそのブランチが指しているコミットを調べます。そこから、コミットによって参照されるツリーをロードし、それらから、ツリー内の各場所に一致する必要がある正確なブロブを取得します。次に、これらの BLOB のコンテンツを適切なファイル パスに読み込みます。

これを支援するために、インデックスを使用します。これは、ファイルの状態をディレクトリ ツリー内のパスにマッピングしたものであり、内容のハッシュと最終変更時刻の記録も含まれます。Git はこれらのハッシュと mtimes を使用して、更新が必要なファイルをすばやく特定し、適切なコンテンツを読み込みます。


特に時間に拘束されないため、低速の CPU + HDD ではあらゆる種類の作業に時間がかかります。可能な限り多くの CPU/ディスク速度を使用します。とはいえ、Git は非常に効率的であるため、かなりの数のファイルや非常に大きなファイル コンテンツの変更 (または非常に遅いデバイス) がない限り、通常は非常に迅速に処理されます。

于 2012-10-06T22:55:54.090 に答える