Из Игоря Зевака :
Поскольку существует около 4 почти одинаково приемлемых, но разных ответов, я обобщу все различные способы оформления тега.
git rev-list -1 $TAG
( ответ ). git rev-list
выводит коммиты, которые приводят к $TAG
, аналогично git log
, но показывают только SHA1 коммита. -1
ограничивает вывод до коммита, на который он указывает.
git show-ref --tags
( ответ ) покажут все теги (локальные и извлеченные из удаленного) и их SHA1.
git show-ref $TAG
( ответ ) покажет тег и его путь вместе с SHA1.
git rev-parse $TAG
( ответ ) покажет SHA1 аннотированного тега.
git rev-parse --verify $TAG^{commit}
( ответ ) покажет SHA1 как аннотированных, так и аннотированных тегов. В Windows используйте git rev-parse --verify %TAG%^^^^{commit}
(четыре шляпы).
cat .git/refs/tags/*
или cat .git/packed-refs
( ответ ) в зависимости от того, является ли тег локальным или извлеченным из удаленного.
Вы просматриваете только первый дочерний элемент li
в вашем запросе вместо того, чтобы искать любой дочерний элемент li
, который может содержать текст, «Модель»
. Вам нужен следующий запрос:
//ul[@class='featureList' and ./li[contains(.,'Model')]]
Этот запрос предоставит вам элементы, которые имеют класс
из featureList
с одним или несколькими li
дочерними элементами. которые содержат текст 'Модель'
.
Я уже давал +1 к решению Джеффа Йейтса.
Вот краткое объяснение, почему ваш подход не работает. Это:
//ul[@class='featureList' and contains(li, 'Model')]
встречается с ограничением функции contains ()
(или любой другой строковой функции в XPath, если на то пошло).
Первый аргумент должен быть строкой. Если вы скармливаете ему список узлов (это делает " li
"), должно произойти преобразование в строку. Но это преобразование выполняется только для первого узла в списке.
В вашем случае первый узел в списке - это
(преобразованный в строку: " Тип: Clip Fan
"), что означает, что это:
//ul[@class='featureList' and contains(li, 'Type')]
действительно выберет узел!