GitツリーオブジェクトとGitの用語

ジョンP

私はgitについて学んでいますが、用語にかなり混乱しています。

「ツリーオブジェクト」が実際には「フォルダオブジェクト」のようなものであることを正しく理解していますか?内部にあるもの(ブロブ)や他のツリー(サブフォルダー)の情報を保持します。それは私たちが取り組んでいるプロジェクトの「実際のデータ」に関する情報を保持します。

同時に、コミット/バージョンの構造にはツリーのような構造があり(実際には、マージを伴う有向非巡回グラフですが、これは単なる詳細です)、このツリーのリーフへのパスはブランチと呼ばれる可能性があります。ただし、gitの「ブランチ」は、実際にはコミットへのポインタにすぎません。

私はこの権利を理解していますか?「バージョンツリー構造」の既存のツリー構造を考えると、それは私だけですか、それとも「ツリーオブジェクト」はかなり誤解を招く名前ですか?ツリーという単語を使用したい場合でも、「ツリーノードオブジェクト」などと呼ぶ方が理にかなっています。gitのツリーオブジェクトにはツリー全体が含まれていないようで、一部のBLOBと他のBLOBへのポインタだけが含まれているようです。木。同様の理由で、名前のブランチも誤解を招くようです。

火曜日

単語の使用に関するユーザー向けドキュメントの主張を除きツリーっぽいの(つまり場合でも、ある単語)、用語のツリーが、彼らはそれを呼び出すかは重要ではないはずですので、Gitの内部にあり:、またはmarplot、またはgripsack、またはあなたが好きなものは何でも。

とはいえ、Git内のツリーオブジェクトは、4つのオブジェクトタイプの1つにすぎません。含まれているのは一連のエントリで、各エントリには3つのアイテムが含まれています。

  • モード:ASCIIスペースで終了し、先行ゼロがない8進数で、エントリのタイプを記述し、x通常のファイルのビットを提供します。
  • 名前:ASCII NUL('\0'C、b'\0'Python)で終了するバイトシーケンスそして
  • 生のハッシュID:エンコードされていない20バイト。1

ツリーオブジェクトの名前は、実際には単なる名前コンポーネントです。モードエントリがの40000場合、ハッシュIDは別のツリーオブジェクトのハッシュIDである必要があります。モードがある場合120000100644または100755、ハッシュIDはブロブオブジェクトのことでなければなりません。モードがの160000場合、ハッシュIDは、他のGitリポジトリ(gitlinkなど)に格納されているコミットオブジェクトであることが期待されます他のモードは通常許可されていませんが、このモードは既存の(非常に古い)リポジトリに表示されるためgit fsck許可さ100664れます。

ブロブまたは(モード120000)シンボリックリンクのファイル名は、ブロブにつながったツリーオブジェクトの名前コンポーネントをスラッシュでつなぎ合わせ、最後のコンポーネントを最後のツリーオブジェクトに追加することで作成されます。つまり、あるコミットの最上位ツリーオブジェクトがT 0であり、blobまたはシンボリックリンクがT 0直接表示される場合、エントリはblobまたはシンボリックリンクを保持するファイルの名前を示します。

Tなら0がエントリー持っfooモードと40000し、ハッシュT 1を、GitはTツリーオブジェクトを読み取るために行きます1場合それはエントリーがあるbarモードでの100xxx120000、Blobオブジェクトは、その名前のファイルやシンボリックリンクになりますfoo/barしたがって、ファイルのパス名は、リーフに到達するまでツリーオブジェクトをトラバースすることによって生成されます。

gitlink(モードのツリーエンティティ160000)の場合、構築されたパス名は、サブモジュールの.gitmodulesクローンを作成する必要がある場合Gitがチェックインするサブモジュールパスを示します。ハッシュIDは、git checkout他のGitでデタッチされたHEADとして実行するコミットです。リポジトリ。他のすべてのエンティティの場合、ハッシュIDはこのGitリポジトリ内のオブジェクトのハッシュIDである必要があります。そうでない場合、ツリーオブジェクトが正しくないか、リポジトリに一貫性がありません(またはその両方)。

Gitを使用している人は、これについて気にする必要はありませんgit write-tree通常どおりファイルをインデックスに入れて、すべてを書き込むために使用します。使用git read-treeインデックス埋めるために、コミット中にハッシュIDでツリーをつかむために2をそのツリーから。使用git showまたはgit cat-file(ハッシュID(ブロブハッシュ)またはパス名のいずれか使用して、単一のファイルの内容を取得するために翻訳することができ、そして今、長い時間のために、同様に扱うことができますが)。commit-hash:pathgit rev-parsegit cat-file


1これは一種の間違いです。Gitが将来より長いハッシュIDを使用するようになると、ツリーオブジェクトに切り捨てられたハッシュを格納する必要があるか、新しいフレーバーのツリーオブジェクトが必要になる可能性があるためです。Mercurialの内部ツリーデータ構造には、より多くの余地が残されていることに注意してください。Gitは、おそらく別のNULで終了するASCII化された16進ダイジェストを使用する必要がありました。しかし、ここには他にも厄介な問題が十分にあるため、これはマイナーな問題です。

2あなたが設定されている場合はGIT_INDEX_FILEgit read-treeそのパス名を指定した別のインデックスにツリーを読み込みます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトのメモリ内ツリー用のツリークエリ言語?

分類Dev

Gitツリーオブジェクトのエントリに使用できるモードは何ですか?

分類Dev

git GCはツリー内のオブジェクトをどのようにコミットしますか?

分類Dev

ルートと任意のオブジェクトの間のオブジェクトのツリーでオブジェクトを検索する

分類Dev

gitツリーオブジェクトを指すコミットを見つける方法は?

分類Dev

gitオブジェクトの検索と処理

分類Dev

Elasticsearch用語の集約-オブジェクトの動的キー用

分類Dev

Javascriptツリーオブジェクトを別のツリーオブジェクトに変換します

分類Dev

オブジェクトツリーを文字列として出力

分類Dev

MOFレイヤー用語でのオブジェクト図とクラス図の関係

分類Dev

オブジェクト指向言語とオブジェクトベース言語の主な違い

分類Dev

git fetch packに単一のツリーオブジェクトをフェッチするように指示できますか?

分類Dev

オブジェクトのダーツ割り当てリスト

分類Dev

リスト内のダーツオブジェクト

分類Dev

すべてのコミットはgitで新しいツリーオブジェクトを作成しますか?

分類Dev

ツリーデータオブジェクトへの表示専用プロパティの追加

分類Dev

gitベアリポジトリにツリーオブジェクトがありません(リンク切れ)

分類Dev

オブジェクトツリーのパスを取得する

分類Dev

親オブジェクトと子オブジェクトを含むツリービュー

分類Dev

git-ワークツリーと共有リポジトリの違いは?

分類Dev

Google の「リポジトリ」ツールを使用した複数チェックアウト用の共有オブジェクト ストア?

分類Dev

グループオブジェクトの適用と変換

分類Dev

C ++の基本クラスオブジェクトと派生クラスオブジェクトのツリー構造

分類Dev

角度の用語-ハッシュオブジェクト

分類Dev

gitリポジトリのサブツリー/サブディレクトリのクローン作成

分類Dev

gitshowの出力をエントリオブジェクトと対応するパスツリーオブジェクトに変換します

分類Dev

オブジェクトノードツリーでnull値のJSONオブジェクトを削除します

分類Dev

DOMツリーのこのノード「オブジェクトテキスト」とは何ですか?

分類Dev

gitの間違った公開リセット用のビジュアルスタジオツール

Related 関連記事

  1. 1

    オブジェクトのメモリ内ツリー用のツリークエリ言語?

  2. 2

    Gitツリーオブジェクトのエントリに使用できるモードは何ですか?

  3. 3

    git GCはツリー内のオブジェクトをどのようにコミットしますか?

  4. 4

    ルートと任意のオブジェクトの間のオブジェクトのツリーでオブジェクトを検索する

  5. 5

    gitツリーオブジェクトを指すコミットを見つける方法は?

  6. 6

    gitオブジェクトの検索と処理

  7. 7

    Elasticsearch用語の集約-オブジェクトの動的キー用

  8. 8

    Javascriptツリーオブジェクトを別のツリーオブジェクトに変換します

  9. 9

    オブジェクトツリーを文字列として出力

  10. 10

    MOFレイヤー用語でのオブジェクト図とクラス図の関係

  11. 11

    オブジェクト指向言語とオブジェクトベース言語の主な違い

  12. 12

    git fetch packに単一のツリーオブジェクトをフェッチするように指示できますか?

  13. 13

    オブジェクトのダーツ割り当てリスト

  14. 14

    リスト内のダーツオブジェクト

  15. 15

    すべてのコミットはgitで新しいツリーオブジェクトを作成しますか?

  16. 16

    ツリーデータオブジェクトへの表示専用プロパティの追加

  17. 17

    gitベアリポジトリにツリーオブジェクトがありません(リンク切れ)

  18. 18

    オブジェクトツリーのパスを取得する

  19. 19

    親オブジェクトと子オブジェクトを含むツリービュー

  20. 20

    git-ワークツリーと共有リポジトリの違いは?

  21. 21

    Google の「リポジトリ」ツールを使用した複数チェックアウト用の共有オブジェクト ストア?

  22. 22

    グループオブジェクトの適用と変換

  23. 23

    C ++の基本クラスオブジェクトと派生クラスオブジェクトのツリー構造

  24. 24

    角度の用語-ハッシュオブジェクト

  25. 25

    gitリポジトリのサブツリー/サブディレクトリのクローン作成

  26. 26

    gitshowの出力をエントリオブジェクトと対応するパスツリーオブジェクトに変換します

  27. 27

    オブジェクトノードツリーでnull値のJSONオブジェクトを削除します

  28. 28

    DOMツリーのこのノード「オブジェクトテキスト」とは何ですか?

  29. 29

    gitの間違った公開リセット用のビジュアルスタジオツール

ホットタグ

アーカイブ