Если тег git изменяется на удаленном компьютере, git fetch не обновляет его локально. Это ошибка?
Я исправил его для своего репо, удалив локальный тег, а затем выполнив git fetch. Это привело к обновлению тега.
Есть ли "правильный" способ обновления тегов, которые могут быть изменены на удаленном компьютере? Это простой тег, не подписанный или ничего, созданный с тегом git
Ответы
Ответ 1
Убедитесь, что вы извлекаете все теги (через git fetch --tags
), чтобы получить все теги, а не только те, которые ссылаются на коммиты, достижимые из голов веток.
Эти (извлеченные) теги являются аннотированными (и, как правило, не легкими), и если вы добавите удаленный в локальный репозиторий, они просто вернутся после извлечения.
Однако, если вы удалили облегченный, вам нужно воссоздать его локально: облегченный тег обычно не отправляется и не извлекается в/из удаленного репо.
Обратите внимание, что начиная с git 1.9/2.0 (первый квартал 2014 года), git fetch --tags
будет получать все (например, git fetch
), а также теги. Смотрите "Включает ли git fetch --tags
" git fetch
'?".
Опять же, выборка "все" означает аннотированный и легкий (если эти легковесные теги были предварительно помещены).
Как отмечено ниже в biocybermananswer, если вы хотите получать теги со всех пультов (не только пульт по умолчанию с именем "origin
"), вам необходимо добавить --all
опция.
git fetch --tags --all
Ответ 2
Я думаю, что правильный путь:
git fetch origin --tags --force
Вам следует избегать наличия ветки с тем же именем тега, потому что проверка приостанавливает ветвь, и вы можете упасть, как тег не обновляется. Возможно, git должен иметь предупреждение в этом случае, например:
Вы обновили тег, который теперь отличается от ветки одно и то же имя. Ссылка на "тэг" стала двусмысленной.
Ответ 3
То, что вы сказали, является правильным способом, и это то, что рекомендует руководство git tag
(на самом деле, говорит он, не меняет теги на удаленном репо, если мир не подходит к концу):
git tag -d X
git fetch origin tag X
Ответ 4
На самом деле git fetch --tags
достаточно, чтобы позволить git перезаписывать легкие и аннотированные теги удаленными тегами любого вида. Вы можете считать это ошибкой документации, если не упоминать об этом.
Локальные теги с именами, которые не имеют эквивалента на пульте, будут оставлены в одиночку с этой командой.
Протестировано с git версии 2.7.4.
Ответ 5
Я не думаю, что это ошибка. Хотя вы не должны менять теги, если вы меняете вверх, это обновит тег вашего репо:
git fetch origin "+refs/tags/*:refs/tags/*"
Ответ 6
В случае, если у одного есть несколько восходящих потоков:
git --version
git version 2.11.1
git fetch --tags --all
без опции --all
, я не мог получить теги из восходящего потока, чье имя не "вверх по течению".