2015-06-09 3 views
3

Каждый раз, когда мне нужно что-то помимо стандартного поиска, я нахожу себя в нескольких поисках, искал Google и, в конце концов, ужасно терпел неудачу. По-видимому, синтаксис поиска Hg довольно обширен, и я бы хотел использовать его силу, но я, похоже, не могу найти хорошую ссылку.Поиск истории изменений частичного файла или пути в Mercurial или TortoiseHg

Например, довольно часто я хочу найти все изменения в репозитории, связанные с совпадением частичного пути. Я знаю, что следующие работы:

file('path:full/path/file.txt') 

Но я хотели бы поиск файлов по частичному совпадению, и ни один из следующих работал:

jquery     -- seems to find everything 
file(jquery*)   -- finds nothing 
file('jquery*')   -- finds nothing 
file('path:jquery.*') -- finds nothing 
file('name:jquery.*') -- finds nothing 
file('path:jquery.js') -- finds every revision, it seems 

Из всплывающего окна в TortoiseHg я вижу, что есть а Gazillion варианты, но ни намека о том, как использовать их (ссылка справки показывает немного больше, но ничего на том, что шаблон должен выглядеть в file(pattern)):

enter image description here

В конце концов я обычно нахожу то, что хочу, используя другие способы поиска, но было бы так приятно использовать эту силу выражения, и довольно стыдно, что после стольких лет я никогда не был узнал, как использовать это.

ответ

4

Я могу очень посоветовать использовать эту справочную систему hg для этого. Самые полезные страницы, чтобы посмотреть на (на мой взгляд):

hg help revsets 
hg help filesets 
hg help patterns 

На странице о шаблонах, вы можете найти о «пути:»:

To use a plain path name without any pattern matching, start it with 
"path:". These path names must completely match starting at the current 
repository root. 

Другими словами: с помощью «путь: 'не подходит для этой цели. Чуть ниже, «Глоб:» упоминается:

To use an extended glob, start a name with "glob:". Globs are rooted at 
the current directory; a glob such as "*.c" will only match files in the 
current directory ending with ".c". 

The supported glob syntax extensions are "**" to match any string across 
path separators and "{a,b}" to mean "a or b". 

Другими словами, она должна быть возможность использовать шаблон file('glob:**jquery*'). На самом деле вышеприведенный шаблон также будет работать без префикса glob, поэтому: file('**jquery*'). См. Часть страницы об revsets:

"file(pattern)" 
    Changesets affecting files matched by pattern. 

    For a faster but less accurate result, consider using "filelog()" 
    instead. 

    This predicate uses "glob:" as the default kind of pattern. 
+0

Отлично! Действительно, 'file ('** jquery *')' сделал трюк. Не могу поверить, что я попробовал синтаксис '**', но без добавленного единственного шаблона '*'. Спасибо за указатели, где найти помощь по этому поводу. – Abel

 Смежные вопросы

  • Нет связанных вопросов^_^