Подтвердить что ты не робот

Если тег git изменяется на удаленном компьютере, git fetch не обновляет его локально. Это ошибка?

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

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

4b9b3361

Ответ 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, я не мог получить теги из восходящего потока, чье имя не "вверх по течению".