Как соотносятся `ls-remote --refs` и клонирование, а затем`description --tags`?
Вывод самого последнего тега удаленного репозитория дает другой ответ, нежели клонирование этого репозитория с последующим описанием его тегов. Например
$ git ls-remote --refs git://git.kernel.org/pub/scm/git/git.git | tail -1
dcba104ffdcf2f27bc5058d8321e7a6c2fe8f27e refs/tags/v2.9.5
$ git clone -q git://git.kernel.org/pub/scm/git/git.git gitdir && cd gitdir && git describe --tags
v2.31.1-606-gdf6c4f7
Как эти два вида ценностей соотносятся друг с другом? Насколько они разные?
Я понимаю, что « имена тегов являются локальными », и мой вопрос может относиться к этому, но я думаю, что не понимаю значения этой фразы. Я попробовать другое предложение к
git fetch --tags
перед звонком
describe
, но безрезультатно.
В конечном итоге я хочу найти программным способом наиболее стабильный выпуск или тег, если они не используют выпуски, и проверить эту версию, чтобы собрать ее локально.
2 ответа
TL;DR
Я считаю, что вам нужен первый токен из вывода
Подробности
Две команды служат разным целям.
, с другой стороны, пытается дать вам краткое описание (по умолчанию или указанного вами коммита) относительно самого последнего доступного оттуда тега. Если вы используете свои теги только для стабильных коммитов, то, вероятно, это будет именно тот тег, который вам нужен. Затем, как только он обнаружит этот тег, он сообщает вам, сколько еще коммитов, 606 из них в вашем примере, затем «g» (не знаю почему), затем sha1 of. Это должно быть понятное для человека описание любого коммита, например: «О, у вас 606 коммитов раньше, чем v2.31.1», но также и недвусмысленное описание, поскольку вы получаете sha1.
Что касается добавления опции, она вам понадобится, если у вас есть теги без аннотаций, например, если некоторые из них созданы с использованием
Если ваше репо содержит теги только для стабильных выпусков, и эти выпуски не находятся в другой ветке выпуска, и у вас никогда не было дефисов в именах тегов, то это будет самый последний стабильный выпуск, который является родительским для
git describe --tags | sed 's/-.*//'
Ссылки, кажется, отсортированы по алфавиту, а не по числовым значениям, поэтому
tail -1
возвращает не последний тег, а последний в алфавитном порядке. Посмотреть весь вывод
git ls-remote
; это соответствующая часть:
a320a5c4764b02f0898a98b4b58e11fad5e54e09 refs/tags/v2.3.9
2d9685d47a7e516281aa093bf0cddc8aafa72448 refs/tags/v2.30.0
a8eaf9de52c2d49799d7dc724e688ccbfa74390c refs/tags/v2.30.0-rc0
cb70effebd91d9e0d4ce81650785e973b5d16ad1 refs/tags/v2.30.0-rc1
a6fee3f22b95c86086b11e3c93d0f1752f9a75c5 refs/tags/v2.30.0-rc2
36b80a59b799802fe776ed390870fe520d262f5c refs/tags/v2.30.1
4340cdd2bdf420acc349f5cda141141230d5095a refs/tags/v2.30.2
3e90d4b58f3819cfd58ac61cb8668e83d3ea0563 refs/tags/v2.31.0
4c4ac06896d8b9ec1ded1d5d9aeedb4e8ece44ab refs/tags/v2.31.0-rc0
6a80b8083c4be2c5703ec122e511a6747af53295 refs/tags/v2.31.0-rc1
ca1f84a036c5658938d72650ae34630ebb140866 refs/tags/v2.31.0-rc2
28afb7555c7013c02b5ee5dc0286546f1f8e2b8f refs/tags/v2.31.1
67308bd628c6235dbc1bad60c9ad1f2d27d576cc refs/tags/v2.4.0
92db05f2a784fe0a715de29fc97172eac6bb5089 refs/tags/v2.4.0-rc0
1c8737f27f912aa2438ce3bf9d4e83eb178de00a refs/tags/v2.4.0-rc1
48e512c8c9397baa5533efa6683f45646234ae1e refs/tags/v2.4.0-rc2
4beece6ef56cb59ea05afb326fd17c1839b8f282 refs/tags/v2.4.0-rc3
2be062dfcfd1fd4aca132ec02a40b56f63776202 refs/tags/v2.4.1
dd0e3e9610a9b312236fb926c5a9d8cbd73190d9 refs/tags/v2.4.10
4f24175ae76efaf8265e179662a4258387019256 refs/tags/v2.4.11
0a493fee385e530baa898a4ba4c0a64fd02ed0d6 refs/tags/v2.4.12
29932f3915935d773dc8d52c292cadd81c81071d refs/tags/v2.4.2
Для сортировки по числовым значениям используйте --sort=v:refname
:
$ git ls-remote --sort=v:refname --refs git://git.kernel.org/pub/scm/git/git.gitt | tail -10
a8eaf9de52c2d49799d7dc724e688ccbfa74390c refs/tags/v2.30.0-rc0
cb70effebd91d9e0d4ce81650785e973b5d16ad1 refs/tags/v2.30.0-rc1
a6fee3f22b95c86086b11e3c93d0f1752f9a75c5 refs/tags/v2.30.0-rc2
36b80a59b799802fe776ed390870fe520d262f5c refs/tags/v2.30.1
4340cdd2bdf420acc349f5cda141141230d5095a refs/tags/v2.30.2
3e90d4b58f3819cfd58ac61cb8668e83d3ea0563 refs/tags/v2.31.0
4c4ac06896d8b9ec1ded1d5d9aeedb4e8ece44ab refs/tags/v2.31.0-rc0
6a80b8083c4be2c5703ec122e511a6747af53295 refs/tags/v2.31.0-rc1
ca1f84a036c5658938d72650ae34630ebb140866 refs/tags/v2.31.0-rc2
28afb7555c7013c02b5ee5dc0286546f1f8e2b8f refs/tags/v2.31.1