Разве git ls-tree blob sha не уникален? - PullRequest
0 голосов
/ 30 мая 2018

Я всегда думал, что у каждого git-объекта есть свой уникальный sha.Затем, когда я листал дерево мерзавцев, я обнаружил следующее:

...
100644 blob fc47072354934eb062321af9d1c4897244562b67    exp2f-inputs
100644 blob fc47072354934eb062321af9d1c4897244562b67    expf-inputs
...
100644 blob 7eb7bda5e433f5df0fd6fec001c69cab7a08ebdb    fmaxf-inputs
...
100644 blob 7eb7bda5e433f5df0fd6fec001c69cab7a08ebdb    fminf-inputs
...
100644 blob 50a97394769447a692318ccefe333b494da7cc97    log2f-inputs
100644 blob 50a97394769447a692318ccefe333b494da7cc97    logf-inputs
...

Эти файлы из glibc .

У меня такой вопрос, это shaне должен быть уникальным для каждого объекта git?

1 Ответ

0 голосов
/ 30 мая 2018

Каждый Git объект имеет уникальный SHA.Этот объект дерева, который вы перечисляете, содержит несколько ссылок на один и тот же объект BLOB-объекта.

Объект BLOB-объекта - это, в основном, содержимое файла.Эти два файла имеют одинаковое содержимое, поэтому Git сохраняет их как один и тот же BLOB-объект.

$ echo 'basset hounds got long ears' > file1
$ cp file1 file2
$ git hash-object -t blob file1 file2
a55bd80950a2a5fc0b43b76ec1b3da190efcd212
a55bd80950a2a5fc0b43b76ec1b3da190efcd212

Вот иллюстрация взаимосвязи между объектами дерева и BLOB-объектов из главы Git Objects книги Pro Git..

enter image description here

Вот как хранится это дерево файлов ...

new.txt       "new file"
test.txt      "version 2"
bak/
    test.txt  "version 1"

Кстати, вот как Gitможет эффективно хранить полные снимки каждого файла при каждом коммите.Поскольку каждый коммит обычно изменяет только несколько файлов, коммиты в основном ссылаются на одно и то же дерево и объекты BLOB-объектов.

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