Удалите локальные теги git, которых больше нет в удаленном хранилище. - PullRequest
406 голосов
/ 03 декабря 2009

Мы используем теги в git как часть нашего процесса развертывания. Время от времени мы хотим очистить эти теги, удалив их из нашего удаленного репозитория.

Это довольно просто. Один пользователь удаляет локальный тег и удаленный тег в одном наборе команд. У нас есть небольшой сценарий оболочки, который объединяет оба этапа.

2-й (3-й, 4-й, ...) пользователь теперь имеет локальные теги, которые больше не отражаются на пульте.

Я ищу команду, аналогичную git remote prune origin, которая очищает локально отслеживаемые ветви, для которых удаленная ветвь была удалена.

В качестве альтернативы можно использовать простую команду для отображения удаленных тегов для сравнения с локальными тегами, возвращаемыми через git tag -l.

Ответы [ 13 ]

2 голосов
/ 14 июля 2017

TortoiseGit теперь может сравнивать теги.

Левый журнал удален, правый локальный.

enter image description here

Использование функции сравнения тегов в диалоге синхронизации:

enter image description here

Также см. Выпуск TortoiseGit 2973

1 голос
/ 06 апреля 2019

Тот же ответ, что и у @Richard W, но для Windows (PowerShell)

git tag | foreach-object -process { git tag -d $_ }
git fetch -t
1 голос
/ 09 сентября 2014

Как насчет этого - отбросить все локальные теги, а затем повторно получить? Учитывая, что ваше репо может содержать подмодули:

git submodule foreach --recursive  'git tag | xargs git tag -d'
(alternatively, "for i in `find .git  -type d -name '*tags*'`; do rm -f $i/*;  done")
git fetch -t
git submodule foreach --recursive git fetch -t
...