Делают ли теги git?

С тех пор, как я создал свой репозиторий, создается впечатление, что созданные мной теги не помещаются в репозиторий. Когда я делаю git tag в локальном каталоге, присутствуют все тэги, но когда я вхожу в удаленный репозиторий и делаю git tag, появляются только первые несколько.

В чем может быть проблема?

Ответ 1

Вы можете сделать это:

git push --tags

Ответ 2

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

$ git push <remote> tag <tagname>

нажать один тег или

$ git push <remote> --tags

нажать все теги (или git push --tags, чтобы нажать на удаленный пул по умолчанию, обычно origin).

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


Подводя итог тому, что Джунио С. Хамано написал (связанный в комментариях @Andre Miras)

При извлечении вы взаимодействуете с удаленным репозиторием, опубликованным кем-то, что означает:

  • набор тегов, которые существуют, есть все, что хотели видеть издатели, и
  • не только вы, но и другие люди также увидите те же теги.

Другими словами, теги в репозиториях, которые вы извлекаете, предназначены для публичного и совместного использования. Это облегчит общение между разработчиками, если всем легко получить эти теги.

Вот почему теги git fetch автоматически "следуют", т.е. загружают теги при загрузке исправлений, на которые они указывают, - другими словами, загружают все соответствующие опубликованные теги.

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

Для этого нужно явно указать тег, чтобы отметить тег как общедоступный.


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

[remote "publish"] # or whatever it is named
    url = ...
    push = +refs/heads/*:refs/heads/*
    push = +refs/tags/*:refs/tags/*

Это означает, что вы нажимаете все головки (все ветки) и все теги (если вам не требуется принудительное нажатие головок, удалите префикс "+" из refspec).

Ответ 3

Обратите внимание, что начиная с git 1.8.3 (22 апреля 2013 г.) вам больше не нужно делать 2 команды для добавления веток и затем для добавления тегов:

Новая --follow-tags " --follow-tags " указывает " git push " выдвигать соответствующие аннотированные теги при выталкивании веток.

Теперь вы можете попробовать при нажатии новых коммитов:

git push --follow-tags

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


Это было введено в коммите c2aba15 Джунио С. Хамано (gitster):

Новая опция " --follow-tags " сообщает " git push " о том, чтобы выталкивать аннотированные теги, которые отсутствуют с другой стороны и которые могут быть достигнуты историей, которая в противном случае выталкивается.

Например, если вы используете " simple ", " current " или " upstream " нажатие, вы обычно будете выдвигать историю, ведущую к фиксации в вашем текущем HEAD и ничего больше.
С помощью этой опции вы также отправляете все аннотированные теги, которые могут быть доступны из этого коммита, на другую сторону.


Конфигурация push.followTags позволяет по умолчанию включать --follow-tags (Git 2.4. 1+, Q2 2015). Смотрите " Push git commits & tags одновременно "

Ответ 4

Я обычно делаю:

[remote "publish"] # or whatever it is named
    url = ...
    push = :
    push = +refs/tags/*:refs/tags/*

Это означает, что он подталкивает каждую ветвь, которая уже существует, плюс теги. Он не заставляет толчок, и он не толкает ветвь, которую вы не нажимали вручную.

Ответ 5

И если вы хотите принудительно извлечь все теги, вы можете установить его в конфиге на:

git config remote.origin.tagopt --tags

Из документов:

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