Если тег git изменяется на удаленном компьютере, выборка git не обновляет его локально.Это ошибка? - PullRequest
48 голосов
/ 08 декабря 2011

Я исправил это для своего репо, удалив локальный тег, а затем выполняя git fetch.Это принесло обновленный тег.

Есть ли "правильный" способ обновления тегов, которые могли быть изменены на пульте дистанционного управления?Это простой тег, не подписанный или что-либо, созданный с помощью «git tag»

Ответы [ 6 ]

70 голосов
/ 08 декабря 2011

Убедитесь, что вы выбрали все теги (через git fetch --tags), чтобы получить все теги, а не только те, которые ссылаются на коммиты, достижимые из голов ветвей.

Эти (извлеченные) теги являются аннотированными (и, как правило, не легкими) , и если вы добавите удаленный в локальный репозиторий, они просто вернутся после извлечения.

Однако, если вы удалили облегченный, вам нужно его воссоздать локально: облегченный тег не обычно отправляется или извлекается в / из удаленного репо.

Обратите внимание, что начиная с git 1.9 / 2.0 (1 квартал 2014 года), git fetch --tags будет получать все (например, git fetch), а также теги. Смотрите « Включает ли« git fetch --tags »« git fetch »? ».

Опять-таки, извлечение «всего» означает аннотированный и легкий (если эти легковесные теги были предварительно помещены).


Как отмечено ниже в biocyberman 's ответ , если вы хотите получить теги от всех пультов (не только пульт по умолчанию с именем' origin) '), вам нужно добавить опцию --all .

git fetch --tags --all
9 голосов
/ 01 октября 2016

Я думаю, что правильный путь:

  git fetch origin --tags --force

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

Вы обновили тег, который теперь отличается от ветви одно и то же имя Ссылка на «тэг» стала неоднозначной.

7 голосов
/ 08 декабря 2011

То, что вы сказали, - правильный путь, и это то, что рекомендует руководство git tag (на самом деле, говорится, не меняйте теги на удаленном репо, пока мир не подходит к концу):

git tag -d X
git fetch origin tag X
2 голосов
/ 10 января 2017

Фактически git fetch --tags достаточно, чтобы позволить git перезаписывать легкие и аннотированные теги удаленными тегами любого вида. Вы можете считать это ошибкой документации, если не упомянуть об этом.

Локальные теги с именами, не имеющими эквивалента на удаленном устройстве, останутся в одиночку с этой командой.

Протестировано с версией git 2.7.4.

1 голос
/ 09 ноября 2017

В случае, если один имеет несколько восходящих потоков:

git --version
git version 2.11.1 
git fetch --tags --all

без опции --all я не смог получить теги от вышестоящего, чье имя не является "вышестоящим".

1 голос
/ 13 сентября 2013

Я не думаю, что это ошибка. Хотя вы не должны менять теги, если один из них меняет апстрим, это обновит тег вашего репо:

git fetch origin "+refs/tags/*:refs/tags/*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...