Указывает ли тип объекта дерева во внутренних элементах git только на блоб или на деревья? - PullRequest
1 голос
/ 16 февраля 2020

Я много изучал модель 3 коммитов внутренних элементов git, и на диаграмме показано, что тип объекта дерева указывает и на другие деревья, но когда я делаю git cat-file -p 'sha-ha sh' , он говорит, что дерево указывает только на капли. Пожалуйста, обратитесь к скриншоту прилагается. Пожалуйста, помогите мне со скриншотом, где дерево указывает на какое-то другое дерево, или скажите мне любой случай использования, который я могу пропустить.

j

Ответы [ 2 ]

3 голосов
/ 16 февраля 2020

Если имя файла a/b/c/f.ext, оно будет сохранено в коммите как:

  • на уровне коммита: дерево, содержащее поддерево с именем a
  • на уровне поддерева с именем a: дерево, содержащее поддерево с именем b
  • на уровне поддерева с именем b: дерево, содержащее поддерево с именем c
  • на уровне поддерева с именем c: дерево, содержащее BLOB-объект с именем f.ext

Следовательно, сверху мы просто объединяем имена каждого дерева более высокого уровня, чтобы получить фактическое имя файла, a/b/c/f.ext.

Ничего из этого на самом деле не имеет значения при использовании файла, поскольку важной версией файла является та, которая указана в индексе , и тот называется a/b/c/f.ext (с косой чертой в имени). Это имеет значение только при чтении деревьев в индекс (git read-tree) и при записи индекса в ряд деревьев (git write-tree).

1 голос
/ 16 февраля 2020

Я думаю, что @torek объяснил это довольно хорошо. Кроме того, я хотел бы добавить, что все это хранилище выполнено в виде хэшей SHA1, blob (большой двоичный объект) хранит содержимое файла, в то время как trees хранит, возможно, в неопределенном смысле, имя файла и поддеревья. внутри него.

Этот - довольно хорошее руководство по внутренним элементам Git, вы также можете взглянуть на него.

Приветствия!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...