On Sat, May 06, 2006 at 07:36:16PM +0400, Anton Farygin wrote: > Вопрос к знатокам git'а: > > делаю git-update-server-info для скачанного репозитария. > > В файле .git/info/refs получается часть тэгов помечено как {}, часть - > не помечено. > > Что бы это значило ? Вообще ^{} обозначает операцию снятия тэгов - т.е., если ref указывает на объект типа tag, ref^{} будет указывать на объект какого-либо другого типа, на который в конечном итоге указывал тэг (если в цепочке было несколько тэгов, указывающих друг на друга, убирается вся цепочка). В .git/info/refs для ссылок, указывающих на объекты типа tag, пишется две строки - sha1 самого тэга (без ^{}) и объекта, на который указывал этот тэг (с ^{}; обычно это commit, но в общем случае это не обязательно). > Воспроизвести можно на udev: > git-clone git://git.kernel.org/pub/scm/linux/hotplug/udev.git > cd git > git-update-server-info > > И потом посмотреть .git/info/refs для тэга 091 > > Посмотрел в исходники - там проверяется наличие if (o->type == tag_type) > > Для иэга 091 почему-то не выставлен tag_type > > Кто виноват ? что делать ? Виноват в данном случае мантейнер udev, который с некоторого времени перестал создавать тэги с описаниями при выпуске версий udev. В git предполагается, что тэг без описания (просто файл в ./git/refs/tags, содержащий sha1 commit-а) не нужен никому, кроме разработчика, который его поставил (возможно, временно), и по умолчанию такие тэги не забираются при выполнении git fetch (только при явном вызове git fetch --tags). А вот полноценный тэг, для которого создаётся отдельный объект, содержащий текстовое описание и, возможно, подпись GPG, git fetch будет забирать автоматически, если объект, на который указывает этот тэг, доступен локально.