Чи можемо ми встановити Git за замовчуванням для отримання всіх тегів під час віддаленого потягу?


153

На даний момент у мене є дистанційна установка git, як показано нижче:

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

Коли я випускаю git pullна ведучому відділення, всі віддалені голови перебираються у віддалені / вгору, а потім віддалені / вгору / мастер об'єднуються у головний. Будь-які теги, до яких можна дістатися, також одночасно виймаються, що дуже зручно.

Я б хотів git pullдодатково отримати всі теги з віддаленого пристрою, а не лише ті, які безпосередньо доступні з голови. Я спочатку намагався розмістити tagopt == --tags, але виявив, що це спричиняло лише теги, і таким чином все було порушено. (Хуніо навіть каже, що це жахлива помилка ).

Чи є спосіб git pullотримати всі віддалені теги за замовчуванням, крім віддалених голів?


1
Нагадування про себе: Переконайтесь, що ви фактично спочатку натиснули тег (не працює автоматично): git push origin <tag_name>
Hafenkranich

Використання tagoptрішення більше не є неправильною конфігурацією; станом на 1.9 / 2.0 (1 квартал 2014 р.) це отримає всі теги, крім того, що зазвичай отримується.
mgiuffrida

Відповіді:


95

Ви повинні мати змогу досягти цього, додавши уточнення тегів до локальної конфігурації. Конкретно:

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

5
Ага, я ніколи не розумів, що ти можеш мати кілька рядків вибору, я вважав, що останній просто переможе. Це дуже приємно і явно.
jleahy

1
Остерігайтеся використовувати це з git 2.21, дивіться apple.stackexchange.com/questions/352404/…
Vadorequest

306

Простий git fetch --tagsпрацював для мене.


13
@Fizzix Можливо, назву слід змінити, щоб вона включала "за замовчуванням". Цей пост відповів на моє запитання.
Метт Кнайзер

2
Це для мене не вийшло. Я бачу теги, за допомогою яких git ls-remote.
dangeroushobo

Це може не відповісти на точне запитання, але воно відповідає на запитання в заголовку, і саме так я знайшов його за допомогою веб-пошуку.
Hubert Grzeskowiak

68

Цей --forceпараметр корисний для оновлення локальних тегів. Головним чином, якщо у вас є плаваючі теги:

git fetch --tags --force

У опції git pull є також --forceваріанти, і опис такий же:

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

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

За замовчуванням теги, які вказують на об'єкти, які завантажуються з віддаленого сховища, отримуються та зберігаються локально.

Якщо ця заявка за замовчуванням не є обмеженням, ви також можете спробувати

git pull --force

2
git pull --forceне включаєgit fetch --tags --force
Геній

21

Для мене, здавалося, працює наступне.

git pull --tags

Вибираючи лише теги, ви, мабуть, мали на увазі: `git fetch --tags`
Yuseferi

Відповідь вже є git fetch --tags. Я хотів дати альтернативну відповідь. тягнути = добувати + зливати. Тож витяг теж буває.
Вашанта Ганеш К


1

Я використовую це з magit на kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.