Як ви натискаєте тег до віддаленого сховища за допомогою Git?


2217

Я клонував віддалений сховище Git до свого ноутбука, тоді я хотів додати тег, щоб я побіг

git tag mytag master

Коли я запускаю git tagна своєму ноутбуці, відображається тег mytag. Потім я хочу натиснути це на віддалений сховище, щоб я мав цей тег на всіх своїх клієнтах, тому я запускаю, git pushале отримав повідомлення:

Все сучасне

І якщо я заходжу на свій робочий стіл і запускаю, git pullто git tagтеги не відображаються.

Я також спробував внести незначну зміну у файл у проекті, а потім натиснути його на сервер. Після цього я міг перетягнути зміну з сервера на настільний комп'ютер, але досі немає тегів під час роботи git tagна настільному комп’ютері.

Як я можу натиснути тег до віддаленого сховища, щоб усі клієнтські комп'ютери могли бачити його?

Відповіді:


1086

git push --follow-tags

Це здоровий варіант, введений у Git 1.8.3:

git push --follow-tags

Він натискає обидва коміти та лише теги, які є обома:

  • зазначається
  • досяжний (пращур) з підштовхування здійснює

Це здорово, тому що:

Саме з тих причин --tagsслід уникати.

Git 2,4 додав в push.followTagsопцію , щоб включити цей прапор за замовчуванням , які можна встановити з:

git config --global push.followTags true

16
Дякую за це, має сенс підштовхувати все за один раз, а не потрібно натискати вміст, а потім посилати теги окремо.
Шейн

1
Мені відразу не було зрозуміло, що це стосунок між "анотованим" та "доступним за допомогою віддалених комітетів". Я сподівався, що це підштовхне всі доступні теги, незалежно від того, якщо це буде помічено чи ні. Можливо, відредагуйте, щоб переконатися, що це не АБО?
Готьє

Soo, коли я це робив, я повертаюся до bitbucket, чи повинен я десь побачити список тегів, окрім того, щоб мати можливість бачити його з командного рядка?
PositiveGuy

10
Це не працює для мене в git 2.5.0, але так git push origin --tagsі є.
nnyby

3
Дякуємо за пораду push.followTags. Я не можу повірити, що це не стандартний стандарт. Без цього не намагайтеся навіть тегувати, ви забудете і вийдете з тегів синхронізації.
moodboom

3604

Щоб натиснути один тег:

git push origin <tag_name>

І наступна команда повинна висувати всі теги ( не рекомендується ):

git push --tags

426
Я рекомендую не використовувати або навчати інших користуватися, git push --tagsоскільки це може бути дуже важко позбутися від поганих тегів, коли ваші колеги навчаються натискати всі теги, оскільки люди продовжують натискати старі погані теги, які вони мають локально, кожен раз, коли вони хочуть щоб натиснути новий тег. Через це я лише кожен радить комусь скористатися git push origin <tag_name>зараз.
Скотт Юнгвірт

43
Щоб натиснути переміщений тег: git push origin <tag_name> --force
Боб Штейн

38
Ну @ScottJungwirth Я думаю, що розробник повинен бути обережним. В іншому випадку ви можете також порадити взагалі не навчати доступних команд.
Вілла

18
Якщо ваш тег збігається з віддаленою гілкою і git pushне вдається error: src refspec <tag_name> matches more than one., ви можете натиснути його якgit push origin tag <tag_name>
Володимир Сапсай

5
Ну @Willa питання було «натиснути на тег в віддалений репозиторій.» Тож git push origin <tag_name>набагато краща відповідь на це питання. ;)
Wildcard

265

Щоб натиснути конкретний, один тег виконайте наступне git push origin tag_name


99

Щоб розширити відповідь Тревора , ви можете натиснути один тег або всі свої теги одночасно.

Натисніть на один тег

git push <remote> <tag>

Це короткий опис відповідної документації, яка пояснює це (деякі параметри команд, опущені для стислості):

git push [[<repository> [<refspec>…]]

<refspec>...

Формат <refspec>параметра:… вихідний номер <src>, за ним - двокрапка :, а потім - пункт призначення <dst>

<dst>Каже , який ісй на віддаленій стороні оновлюються з цим поштовхом ... Якщо :<dst>опущений, то ж сама , як посилання <src>буде оновлюватися ...

тег <tag>означає те саме, що refs/tags/<tag>:refs/tags/<tag>.

Натисніть всі свої теги відразу

git push --tags <remote>
# Or
git push <remote> --tags

Ось короткий опис відповідної документації (деякі параметри команд для короткості опущені):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

Усі посилання під refs/tagsтиском висуваються, на додаток до рефлексів, явно зазначених у командному рядку.


Приклад - це відсутність ключового слова tag. напр git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Це вам не потрібно. Ви натискаєте один тег на походження таким чином: git push origin my-tag(я щойно спробував це!)
Андрес Ф.

Я використовував версію 1.9.1 , як щодо вас @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 версії 2.10.2. Може, це все?
Андрес Ф.

54

Теги не надсилаються до віддаленого сховища командою git push. Нам потрібно явно надіслати ці теги на віддалений сервер, використовуючи таку команду:

git push origin <tagname>

Ми можемо натиснути всі теги одразу за допомогою команди нижче:

git push origin --tags

Ось деякі ресурси для отримання повної інформації про теги на git:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


50

Ви можете натиснути всі локальні теги просто git push --tagsкомандою.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

Я використовую, git push <remote-name> tag <tag-name>щоб переконатися, що я натискаю тег. Я використовую його як: git push origin tag v1.0.1. Ця модель заснована на документації ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
відмінно, мав би бути зверху - оскільки це забезпечує тег, а не гілка висувається помилкою.
samshers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.