Git-теги тоже выдвигаются? - PullRequest
169 голосов
/ 07 июня 2010

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

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

Ответы [ 5 ]

221 голосов
/ 07 июня 2010

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

git push --tags
132 голосов
/ 07 июня 2010

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

$ git push <remote> tag <tagname>

, чтобы выдвинуть один тег, или

$ git push <remote> --tags

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

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


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

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

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

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

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

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

Именно поэтому вам нужно явно нажать метку, чтобы пометить метку как общедоступную.


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

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

Это означает force push всех головок (всех ветвей) и всех тегов (если вы не хотите принудительного толкания головок, удалите префикс «+» из refspec).

57 голосов
/ 23 апреля 2013

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

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

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

git push --follow-tags

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


Это было введено в commit c2aba15 от Junio ​​C Hamano (gitster) :

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

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


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

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

То, что я обычно делаю, это:

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

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

3 голосов
/ 04 августа 2011

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

git config remote.origin.tagopt --tags

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

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

...