Подтвердить что ты не робот

Почему git -описывает префикс идентификатора фиксации буквой "g"?

Типичный вывод git-describe выглядит как

some-tag-32-gf31f980

где some-tag - это имя тега, 32 означает, что описанная фиксация составляет 32 фиксации после фиксации с этим тегом, а gf31f980 означает, что идентификатор фиксации однозначно сокращен до f31f980.

Мой вопрос о g в gf31f980. Почему он там? Моя первая мысль заключалась в том, что он вставлен, чтобы устранить разбор результатов вывода git-describe. Но я не могу придумать ни одного случая, когда это действительно помогает. Например, компонент 32 может быть опущен, и нет никакого способа узнать, что вышеприведенный вывод описывает фиксацию 32 после тэга some-tag, а не фиксацию в теге some-tag-32. Но g не помогает с этим.

Соответствие регулярного выражения для извлечения только идентификатора фиксации может выполнять поиск /-g([0-9a-f]+)$/. Нет простого способа упростить это; вы не можете сделать /-g(.*)$/, например, потому что это может ошибочно соответствовать g в имени тега. Без g вы все равно можете сделать /-([0-9a-f]+)$/, поэтому g вам не поможет. Процессы разбора регулярного выражения будут вести себя аналогичным образом.

g генерируется явно; соответствующий исходный код (вокруг строки 240 из builtin/describe.c):

static void show_suffix(int depth, const unsigned char *sha1)
{
        printf("-%d-g%s", depth, find_unique_abbrev(sha1, abbrev));
}

Трудно найти информацию об этом, потому что соответствующий термин g - это секундомер.

Что для g для?

4b9b3361

Ответ 1

Джесси Льюрс сразу же указал на Twitter, на который на этот вопрос ответили man-страницу git-describe

Префикс "g" означает "git" и        используемый для описания версии программного обеспечения в зависимости от SCM, программное обеспечение        управляется с.