Я столкнулся с тем же вопросом несколько минут назад. Ни один из уже представленных ответов не касался реальной проблемы, которая избавляется от сообщения warning: tag 'foo' is really 'bar' here
и дает git describe
просто перечислить новое имя тега. Это особенно важно в моем случае, поскольку моя система сборки использует git describe
для записи в сборку, какие источники использовались для создания сборки.
Я могу реплицировать проблема:
$ git tag foo --annotate -m"original message"
$ git tag bar foo
$ git tag -d foo
$ git describe
warning: tag 'foo' is really 'bar' here
foo
(Флаг --annotate
выше избыточен, поскольку -m
подразумевает --annotate
, но я включил его для выделения.) Я попытался воспроизвести проблема с легким тегом, но не была в состоянии сделать это. Чтобы реплицировать проблему, необходима аннотация.
Некоторые из них включают в себя толкание предметов, которые уже подтолкнули, но я нахожусь в согласии с Дэвидом Калпом, когда он говорит :
Однако иногда бывает просто не стоит долговременной боли неточной (грязной) истории, а кратковременная боль
blockquote>
Как только вы застряли с
warning: tag 'foo' is really 'bar' here
, вы должны сделать:$ git tag bar bar -m"original message" --force $ git describe bar
При необходимости адаптироваться, если сообщение необходимо изменить.
Чтобы удалить старый тег, если он уже был нажат:
$ git push origin :refs/tags/foo
Чтобы обновить новый тег, если он уже был нажат:
$ git push origin refs/tags/bar
Избежать проблемы
Чтобы избежать проблемы, в первую очередь вам нужно создать
bar
с помощью:$ git tag bar foo -m"original message"
Это ужасное состояние без прерывания (TASK_UNINTERRUPTIBLE) процесса. Это состояние, в котором процесс не реагирует на сигналы до тех пор, пока он не начнет ждать, выполняется. К сожалению, это необходимое зло. См. здесь и здесь Что такое непрерывный процесс? .
Мой ответ - перезагрузить систему. Вызывают ли перезагрузка какие-либо проблемы? Трудно сказать, возможно, это не так. Процесс, который находится в состоянии D, может потребоваться сделать некоторые важные обновления, которые не будут выполняться при перезагрузке. Если вы действительно не можете позволить себе перезагрузиться, попробуйте найти диск, на котором ожидает процесс, и посмотрите, работает ли диск нормально, открыв, закрыв, прочитав / записав в него
Нет - вы не можете убить их, период. kill -9
тоже не работает. И это не ошибка ядра, это по дизайну. Все сигналы блокируются до тех пор, пока эти процессы не покинут состояние D. Они либо покидают состояние D, либо система перезагружается. Нет, перезагрузка не имеет проблем с этими ребятами.
Обычными виновниками такого рода проблем являются съемные мультимедийные устройства, такие как cdrom. Устройство может быть неисправным, или кто-то нашел способ сделать что-то глупое.