каталог объектов не имеет объектов после клона git - PullRequest
0 голосов
/ 21 марта 2020

После того, как я сделал клон git в удаленном репозитории, почему в каталоге .git / objects нет ни одного из объектов и их родительских каталогов, которые начинаются с первых двух символов sha1 ha sh (это имеет каталоги информации и пакета, хотя). Я начинаю видеть объекты только после того, как сделаю свои коммиты. И как git log может работать в этом случае без каких-либо объектов фиксации?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

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

Когда вы выполняете клонирование, сервер предоставляет вам все необходимые объекты в пакете, поэтому он не делает имеет смысл разбивать этот пакет на незакрепленные объекты (если их не очень мало), поэтому Git не делает этого и просто оставляет объекты в пакете.

По мере создания новых объектов они обычно пишется как свободные объекты, поскольку при создании эффективного пакета есть некоторые накладные расходы, и он превращается в пакет только как часть git gc.

0 голосов
/ 21 марта 2020

И как git log может работать в этом случае без каких-либо объектов фиксации?

Вещи, которые вы ищете (вещи, которые живут в * 1006 Каталог * objects под именем ha sh - это распакованные BLOB-объекты. Но git log не нуждается в них. Что ему нужно, так это info , который описывает деревья и капли, и для этого нужен каталог info .

Однако в git clone время, информация также отсутствует. вместо этого git log выглядит в пакете index . И вы тоже можете! Запустите git verify-pack -v для файла пакета .idx и вот список всех ваших больших объектов и деревьев, которых достаточно для git log, чтобы ответить на ваш запрос.

...