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

Что означает ^ {} в git?

Я наткнулся на два нечетных символа в конце команды git ls-remote, и мне интересно, что это значит?

0e4c39557ccb6789173c  refs/tags/2011-11-04
966f8df553f18c486820  refs/tags/2011-11-04^{}

Знаете ли вы, что это значит? {}? Кроме того, почему этот тэг git кажется дублированным?

4b9b3361

Ответ 1

Обозначение ^{} объясняется в руководстве gitrevisions:

<rev>^{}, e.g. v0.99.8^{} 

Суффикс ^, за которым следует пустая пара фигурных скобок, означает, что объект может быть тегом, и рекурсивно разыменовывает тег, пока не будет найден объект без тега.

В этом случае - refs/tags/2011-11-04 - это тег, который указывает на объект тега 0e4c39557ccb6789173c. Выполнив refs/tags/2011-11-04^{} мы можем разыменовать тег до конечного объекта без тега, который в данном случае - 966f8df553f18c486820 (фиксация). Обратите внимание, что ^{} является noop, когда применяется к объектам без тегов.

Команда git show-ref может использоваться для просмотра тегов, а также конечных разыменованных объектов без тегов:

$ git show-ref --tags
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}

$ git show-ref --tags --dereference
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
6ddc0964034342519a87fe013781abf31c6db6ad refs/tags/v0.99.9c^{}
055e4ae3ae6eb344cbabf2a5256a49ea66040131 refs/tags/v1.0rc4
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}

Из руководства пользователя git show-ref:

-d 
--dereference 

Разыменовывать теги в идентификаторы объектов. Они будут показаны с добавлением "^ {}".

Ответ 2

Обратите внимание, что в git ls-remote появился новый фильтр с git 2.8 (март 2016 года).

См. Коммит 99c08d4, коммит ba5f28b, коммит 80b17e5, коммит 40a8852, коммит 54813bd (18 января 2016 г.) Томаса Гуммерера (tgummerer).
Предложил: Педро Рихо (pedrorijo91).
(Объединено с Junio C Hamano - gitster - в коммите bd6934a, 3 февраля 2016 г.)

Это означает, что вы можете показывать только теги с

git ls-remote --refs

Не показывайте очищенные теги или псевдоссылки, такие как HEAD, в выводе.