Push git виконує одночасно і теги


387

Мені відомо про причину, що git push --tagsце окрема операція з простою старою git push. Натискання тегів має бути свідомим вибором, оскільки ви не хочете випадково натиснути на них. Це добре. Але чи є спосіб зв'язати обох разом? (Окрім git push && git push --tags.)


4
У чому ваша проблема git push && git push --tags?
фуз

21
Нічого зокрема, це просто повільніше, оскільки з'єднання потрібно встановити двічі.
Буде Робертсон

16
Дивіться мою оновлену відповідь нижче: --follow-tagsз git 1.8.3
VonC

24
Ще одна причина не робити цього окремо - це уникати запуску двох збірок CI для одного і того ж комітету, коли у вас є така автоматизація.
Alex R

також --tagsне розрізняє полегшене та
позначене

Відповіді:


555

Оновлення травня 2015 року

З git 2.4.1 ви можете це зробити

git config --global push.followTags true

Якщо встановлено значення true enable - за замовчуванням виберіть параметр нижче-тегів.
Ви можете змінити цю конфігурацію під час натискання, вказавши --no-follow-теги.

Як зазначає у цій темі Метт Роджерс у відповідь на Уеса Херда :

--follow-tags лише висуває помічені теги .

git tag -a -m "I'm an annotation" <tagname>

Це буде натиснуто (на відміну від git tag <tagname>легкого тегу, який не буде висунутий, як я вже згадував тут )

Оновлення квітня 2013 року

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

Нова --follow-tagsопція " " повідомляє " git push" натиснути відповідні помічені теги при натисканні гілок .

Тепер ви можете спробувати під час натискання нових комісій:

git push --follow-tags

Однак це не поштовхне всі локальні теги, лише той, на який посилаються коміти, які висуваються із git push.

Git 2.4.1+ (Q2 2015) запровадить опцію push.followTags: див. " Як зробити" git push"включити теги всередині гілки? ".

Оригінальна відповідь, вересень 2010 року

Ядерний варіант був би git push --mirror, який підштовхне всі джерела refs/.

Ви також можете натиснути лише один тег за допомогою вашої поточної філії:

git push origin : v1.0.0 

Ви можете комбінувати --tagsопцію з респектом, наприклад:

git push origin --tags :

(оскільки --tagsозначає: всі посилання під тискомrefs/tags висуваються, крім рефлексій, явно зазначених у командному рядку )


У вас також є запис " Натискання гілок і тегів з одним викликом " git push "

Щойно зручна порада була розміщена у списку розсилки Git Zoltán Füzesi:

Я використовую .git/configдля вирішення цього питання:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

За допомогою цих рядків git push originбуде додано всі ваші гілки та теги. Якщо ви хочете завантажити лише деякі з них, ви можете їх перерахувати.

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

$ git push && git push --tags

Обережно , так як зауважив по Aseem Кишор

push = +refs/heads/*буде силою-штовхає всі ваші гілки .

Це трохи мене покусало, так що FYI.


Рене Шейбе додає цей цікавий коментар :

--follow-tagsПараметр вводить в оману , так як тільки теги під .git/refs/tagsвважаються.
Якщо git gcзапускається, теги переміщуються з .git/refs/tagsдо .git/packed-refs. Після цього git push --follow-tags ...вже не працює, як очікувалося.


3
Один коментар на пост Ви зв'язуєтеся правильно вказує на те , що push = +refs/heads/*лінія сили -pushes все ваші філії. Це трохи мене покусало, так що FYI.
Асеем Кішор

2
Re: --follow-tagsпрапор доданий в git 1.8.3, чи можу я налаштувати свою установку git, щоб зробити це за замовчуванням?
Тревор Бернхем

1
@TrevorBurnham немає, тільки значення push.default( git-scm.com/docs/git-config ) можна визначити дії по замовчуванням на поштовху ( nothing, matching, upstream, simpleяк і в stackoverflow.com/a/10002469/6309 ). Вам потрібно додати --follow-tagявно.
VonC

1
@VonC Що робити, якщо я хочу змусити натиснути тег? git push --follow-tags -fне працювало для мене.
mauryat

1
--follow-tagsПараметр вводить в оману , так як тільки теги під .git/refs/tagsвважаються. Якщо git gcзапускається, теги переміщуються з .git/refs/tagsдо .git/packed-refs. Після цього git push --follow-tags ...вже не працює, як очікувалося.
Рене Шейбе

4

Можливо, це комусь допомагає:

 1. git commit -a -m "msg"  
 2. git tag 0.1.0                // creates a new tag locally     
 3. git push origin tag 0.1.0    // pushes the tag & the code in the remote repo          

Я спробував ваше рішення з git-2.21.0.windows.1 і виявив, що 3 теги лише натискає
Дастін Нд

У моєму кінці це добре працює. Ви пробуєте всі 3 команди в порядку, і віддалене репо встановлено (git remote -v)?
Раджеш Гупта

Я використовував "git commit -m" msg "на кроці 1, і не було параметра -a. Це могло бути причиною. Дякую за подальше!
Дастін


0

Git GUI

У Git GUI є кнопка PUSH - вибачте за каламбур, а у діалоговому вікні, яке воно відкриється, встановлено прапорець для тегів.

Я натиснув гілку з командного рядка без тегів, а потім спробував ще раз натиснути гілку, використовуючи --follow-tagsопцію, описану вище. Параметр описується як наступні примітки з примітками. Мої теги були простими тегами.

Я щось виправив, позначив фіксацію з виправленням (щоб колеги могли вишнево вибрати виправлення), потім змінив номер версії програмного забезпечення та позначив створений мною реліз (щоб колеги могли клонувати цей випуск).

Гіт повернувся, сказавши, що все актуально. Теги не надіслали! Можливо тому, що теги не були помічені. Можливо, тому, що на гілці нічого нового не було.

Коли я робив подібний поштовх з Git GUI, теги були надіслані.

Теги, надіслані за допомогою графічного інтерфейсу Git

Наразі я збираюся підштовхувати зміни до моїх пультам із Git GUI, а не з командним рядком та --follow-tags.

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