Можем ли мы установить Git по умолчанию для извлечения всех тегов во время удаленного извлечения?

154

В настоящее время у меня есть удаленная настройка git, как показано ниже:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Когда я запускаю git pullветку master, все удаленные заголовки извлекаются в remote / upstream, а затем remotes / upstream / master объединяется с master. Любые теги, которые могут быть достигнуты, также извлекаются одновременно, что очень удобно.

Я хотел бы git pullдополнительно получить все метки с пульта, а не только те, которые непосредственно доступны из голов. Первоначально я попытался tagopt == --tagsустановить, но обнаружил, что это привело к выборке только тегов и тем самым сломал все. (Джунио даже говорит, что это ужасное искажение ).

Есть ли способ сделать git pullвыборку всех удаленных тегов по умолчанию, кроме удаленных головок?

jleahy
источник
1
Напоминаю себе: сначала убедитесь, что вы действительно нажали метку (не работает автоматически): git push origin <tag_name>
Hafenkranich
Использование tagoptрешения больше не является неправильной конфигурацией; по состоянию на 1.9 / 2.0 (1 квартал 2014 года) будут получены все теги в дополнение к обычному.
mgiuffrida

Ответы:

95

Вы должны быть в состоянии сделать это, добавив refspec для тегов в вашу локальную конфигурацию. В частности:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*
joshtkling
источник
5
Ага, я никогда не осознавал, что у вас может быть несколько строк извлечения, я предполагал, что последняя просто переопределит. Это очень мило и ясно.
Jleahy
1
Остерегайтесь использования этого с git 2.21, см. Apple.stackexchange.com/questions/352404/…
Vadorequest
306

Простое git fetch --tagsсработало для меня.

russoue
источник
13
@ Fizzix Возможно, заголовок должен быть изменен на «по умолчанию». Этот пост ответил на мой вопрос.
Мэтт Кнайзер
2
Это не сработало для меня. Я могу видеть теги с git ls-remote.
dangeroushobo
Это может не отвечать на точный вопрос, но он отвечает на вопрос в заголовке, и вот как я нашел его через веб-поиск.
Хьюберт Гжесковяк
68

--forceОпция полезна для обновления локальных меток. В основном, если у вас есть плавающие теги:

git fetch --tags --force

У опции git pull также есть --forceопции, и описание такое же:

Когда git fetch используется с <rbranch>: <lbranch> refspec, он отказывается обновлять локальную ветку <lbranch>, если только удаленная ветка <rbranch>, которую он выбирает, не является потомком <lbranch>. Эта опция отменяет эту проверку.

но, согласно документу --no-tags:

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

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

git pull --force
yucer
источник
2
git pull --forceне включаетgit fetch --tags --force
Geniy
21

Мне показалось, что сработало следующее.

git pull --tags
Васанта Ганеш К
источник
Выбирая только теги, вы, вероятно, имели в виду: `git fetch --tags`
Юсефери
Уже есть ответ с git fetch --tags. Я хотел дать альтернативный ответ. тянуть = получить + объединить. Так что выборка тоже бывает.
Васанта Ганеш К
13

Это просто. Сделать

мерзавец - все

amulamul
источник
1

Я использую это с magit на kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
мероприятие
источник