Почему "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
).