Ответ 1
git fetch origin refs/tags/1.0.0
Это терпит неудачу, потому что он не пишет локальную ссылку: он получает удаленные refs/tags/1.0.0
и любые теги (объекты), коммиты и т.д., Необходимые для перехода к нему; он отбрасывает их в FETCH_HEAD
(поскольку всегда выполняются команды git fetch
); и... что это. Он никогда не создает ссылки refs/tags/1.0.0
в вашем репозитории, хотя у него есть все необходимое для этого.
Чтобы создать такой тег, если он еще не существует:
git fetch origin refs/tags/1.0.0:refs/tags/1.0.0
Имя справа от двоеточия - это имя, которое Git будет использовать в вашем репозитории. Вы можете включить этот тег в ветку с именем wacky
, например, назвав ее refs/heads/wacky
. (Нет причин для этого. Я описываю это только для иллюстрации.)
Это принудительная выборка, поэтому, если у вас уже есть refs/tags/1.0.0
, ваш Git откажется обновить вашу ссылку. Если вы хотите перезаписать любой существующий тег 1.0.0
, используйте:
git fetch origin +refs/tags/1.0.0:refs/tags/1.0.0
Если вы хотите получить все теги, с или без перезаписи:
git fetch origin 'refs/tags/*:refs/tags/*'
с или без знака плюс. (Примечание: отметки кавычки предназначены только для защиты *
от вашей оболочки. Знак "плюс" может находиться внутри или вне кавычек. Фактически сами кавычки могут перемещаться в любом месте, пока они окружают все звездочки или другие метасимволы оболочки:
refs/tags/'*:refs/tags/*'
или вместо этого вы можете использовать обратную косую черту:
refs/tags/\*:refs/tags/\*
Во всех случаях мы просто защищаем чувствительную звездочку от оболочки, "звездочки являются вкусными, пусть их есть").