Почему "git description" отображает более старую версию тега в моей чистой копии git-репо?

Немного предыстории:

В настоящее время у меня есть два локальных репозитория git, которые указывают на один и тот же источник / главный проект. Причина, по которой у меня есть два репозитория git, заключается в том, что у меня есть чистая мастер-копия, которую я могу использовать всякий раз, когда мне нужно, и одна копия, в которой моя песочница, где я могу применять изменения, фиксировать и т. Д. Это, вероятно, излишне, но есть некоторые преимущества лично для меня, имея копию локального git.

Сотрудник первоначально создал облегченный тег для 1.0.2, но мы удалили его и пометили его как аннотированную версию с тем же номером. Они передали изменения через git push в удаленное хранилище. Я запустил последние изменения в обоих моих локальных экземплярах git.

Наши теги следующие:

release-1.0.0
release-1.0.1
release-1.0.2

Эта проблема:

Вот проблема, которую я не могу понять. Мой репозиторий с песочницей показывает последнюю версию тега (release-1.0.2) при запуске git describe Msgstr "Это то, что я ожидал. Однако, чистая копия репо, из которой я только извлекаю, показывает старый тег (release-1.0.1), когда я выполняюсь" git describe". Я проверил, что оба указывают на оригинал. Я провел еще какое-то исследование и нашел решение для overstack, которое указало мне на запуск" git cat-file -t ". Вот разница, которую я заметил:

git cat-file -t release-1.0.1 --> tag 
git cat-file -t release-1.0.2 --> commit

Почему в моем репозитории с чистой копией отображается старая версия тега при запуске? git describe "В отличие от моего репозитория с песочницей? Я могу подтвердить, что могу увидеть версию 1.0.2 в списке при запуске" git describe --tags "на чистой копии репо.

1 ответ

Решение

Сотрудник первоначально создал облегченный тег для 1.0.2, но мы удалили его и пометили его как аннотированную версию с тем же номером. Они передали изменения через git push в удаленное хранилище. Я запустил последние изменения в обоих моих локальных экземплярах git.

Если вы не используете --tags флаг, git describe касается только аннотированных (в отличие от легких) тегов. Здесь вывод git cat-file указывает на то, что у вас все еще есть старый release-1.0.2 легкий ярлык в вашей песочнице репо. Загвоздка в том, что по умолчанию git pull Сам по себе не получит более новый, аннотированный тег с тем же именем и перезапишет его более старым, легким тегом.

Чтобы решить проблему, сначала удалите облегченный тег локально, запустив

git tag -d release-1.0.2

в вашей песочнице репо, а затем, запустите

git fetch

(или же git pull, если знаешь что делаешь). Новый release-1.0.2 затем аннотированный тег займет место старого легкого. Вы можете убедиться в этом, запустив git describe или же

git cat-file -t release-1.0.2

который теперь должен выводить tag (не commit).

Другие вопросы по тегам