2

方法 git store メモ:

  • Git は、単一の名前空間のコミットごとに 1 つのメモのみを保存します。複数の名前空間を持つことができます。デフォルトの名前空間は commit です。
  • .git/refs/notes/MainHash_2には、ツリー オブジェクトである 1 つのハッシュ (たとえば ) が含まれています。メモを作成するたびに、ハッシュが変更されます。
  • このツリー オブジェクトには、さらに 2 つのハッシュが含まれています。別のツリー構造 (ノート ツリー構造、たとえばNOTES_2) と親ツリー オブジェクト (このノートを作成する前の .git/refs/notes/ にあるもの、たとえばMainHash_1)
  • メモ ツリー構造には、メモごとに 1 つのエントリが含まれます。各エントリには 2 つのハッシュがあります。1 つは内容を記録するためのもので、もう 1 つは指定されたコミットのためのものです。

3番目のポイントで述べたように、なぜ親が保存されるのですか? この親 (そのタイプはポイント 2 で述べたものと同じ) には、メモごとに 1 つのエントリを含む別のツリーも含まれます。

現在、3 つのメモがあるとします。には、メモごとに 3 つのエントリを含むMainHash_2へのハッシュが含まれています。へのハッシュが含まれており、2 つのエントリが含まれています (現在作成されているものを除く残りのすべてのメモ用)。これらの 2 つのエントリを 2 回保存するのはなぜですか??NOTES_2MainHash_1NOTES_1

4

2 に答える 2

3

ノートの名前空間は git では特別なものではないという理由だけで、完全な履歴を持つ通常のブランチにすぎません。できるよ

git checkout notes/commits

他のブランチと同じようにメモを操作します。たとえば、次のことができます。

git log notes/commits

メモのコミット ログを表示します。このようにして、メモへのすべての変更を追跡できます。

あなたが言った:

.git/refs/notes/commitsMainHash_2には、ツリーオブジェクトである1 つのハッシュ (たとえば) が含まれます。

これはツリーオブジェクトではなく、commitです。のように.git/refs/heads/master。あなたはそれをチェックすることができますgit cat-file -t <hash>

于 2013-06-10T09:44:37.453 に答える