Примітка. Починаючи з git 1.9 / 2.0 (Q1 2014) , git fetch --tagsвитягує теги на додаток до того, що отримується тим самим командним рядком без параметра.
Див зробити c5a84e9 по Michael Хаггерті (mhagger) :
Раніше --tagsваріант " " fetch вважався еквівалентним заданню refspec
refs/tags/*:refs/tags/*
у командному рядку; зокрема, це спричинило remote.<name>.refspecігнорування конфігурації.
Але не дуже корисно вибирати теги, не отримуючи також інших посилань, тоді як цілком корисно мати можливість отримувати теги на додаток до інших посилань.
Тому змініть семантику цього варіанту, щоб зробити останнє.
Якщо користувач хоче отримати лише теги, то все одно можна вказати чіткий перегляд:
git fetch <remote> 'refs/tags/*:refs/tags/*'
Зауважте, що документація до 1.8.0.3 була неоднозначною щодо цього аспекту fetch --tagsповедінки.
Команда f0cb2f1 (2012-12-14) fetch --tagsзробила документацію відповідно до старої поведінки.
Ця фіксація змінює документацію відповідно до нової поведінки (див. Documentation/fetch-options.txt).
Попросіть, щоб усі теги були вилучені з віддаленого пристрою, крім того, що ще отримується .
Оскільки Git 2.5 (Q2 2015) git pull --tagsє більш надійним:
Див. Команду 19d122b від Paul Tan ( pyokagan) , 13 травня 2015 р.
(Об’єднав Хуніо С Хамано - gitster- у комітеті cc77b99 , 22 травня 2015 р.)
pull: видаліть --tagsпомилку в разі відсутності об’єднання кандидатів
Оскільки 441ed41 (" git pull --tags": помилка з кращим повідомленням., 2007-12-28, Git 1.5.4+), git pull --tagsнадрукував би інше повідомлення про помилку, якщо
git-fetchне повернув жодних кандидатів на об'єднання:
It doesn't make sense to pull all tags; you probably meant:
git fetch --tags
Це відбувається тому, що в той час git-fetch --tagsперекривали б будь-які налаштовані рефлекси, і, таким чином, не було б злиття кандидатів. Таким чином, повідомлення про помилку було введено для запобігання плутанини.
Однак, оскільки c5a84e9 ( fetch --tags: теги для отримання, крім
інших матеріалів, 2013-10-30, Git 1.9.0+), git fetch --tagsотримає теги на додаток до будь-яких налаштованих рефлексив.
Отже, якщо не виникає ситуація з кандидатами на об'єднання, це не тому, що --tagsбуло встановлено. Таким чином, це спеціальне повідомлення про помилку зараз не має значення.
Щоб уникнути плутанини, видаліть це повідомлення про помилку.
З Git 2.11+ (Q4 2016) git fetchшвидше.
Див. Запис 5827a03 (13 жовтня 2016 р.) Від Джеффа Кінга ( peff) .
(Об’єднав Хуніо С Хамано - gitster- у комітеті 9fcd144 , 26 жовтня 2016 р.)
fetch: використовуйте "швидкий" has_sha1_fileдля наступних тегів
Під час отримання даних з віддаленого пристрою, який має багато тегів, які не мають відношення до гілок, за якими ми стежимо, ми витрачали занадто багато циклів, перевіряючи, чи в нашому сховищі існує об'єкт, на який вказує тег (на який ми не збираємося!). занадто обережно.
Цей патч привчає використовувати HAS_SHA1_QUICK, щоб пожертвувати точністю для швидкості, у випадках, коли ми можемо працювати з одночасним перепакуванням.
Ось результати включеного сценарію Perf, який створює ситуацію, подібну до описаної вище:
Test HEAD^ HEAD
----------------------------------------------------------
5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3%
Це стосується лише ситуації, коли:
- У вас є багато пакетів на стороні клієнта, щоб зробити
reprepare_packed_git()дорогими (найдорожча частина - це пошук дублікатів у несортованому списку, який наразі є квадратичним).
- Вам потрібна велика кількість посилань на теги на стороні сервера, які є кандидатами для автоматичного слідування (тобто у клієнта немає). Кожен запускає перечитування каталогу пакунків.
- За звичайних обставин клієнт автоматично слідкує за цими тегами, і після одного великого вибору (2) більше не буде правдою.
Але якщо ці теги вказують на історію, яка від'єднана від того, що клієнт в іншому випадку отримує, він ніколи не буде автоматично слідувати, і ці кандидати впливатимуть на нього.
Git 2,21 (лютий 2019) , здається, ввів регрес , коли конфігурація remote.origin.fetchє НЕ один за замовчуванням ( '+refs/heads/*:refs/remotes/origin/*')
fatal: multiple updates for ref 'refs/tags/v1.0.0' not allowed
Git 2.24 (Q4 2019) додає ще одну оптимізацію.
Дивіться команду b7e2d8b (15 вересня 2019 року) від Masaya Suzuki ( draftcode) .
(Об’єднано Хуніо С Хамано - gitster- у комітеті 1d8b0df , 07 жовтня 2019 р.)
fetch: використовувати, oidsetщоб утримати OID-адреси хотів для швидшого пошуку
Під git fetchчас клієнт перевіряє, чи є OID-адреси рекламованих тегів уже в наборі OID-запиту для отримання запиту.
Ця перевірка проводиться при лінійному скануванні.
Для сховища, в якому є багато записів, повтор цього сканування займає 15+ хвилин.
Щоб прискорити це, створіть oid_setOID для інших посилань.