Поиск первого появления текста в репозитории Mercurial - PullRequest
19 голосов
/ 08 марта 2012

У меня есть репозиторий Mercurial с ~ 800 наборами изменений, и мне нужно найти первый набор изменений, где появилось слово Пример . Слово появляется внутри файла .php, а не в коммите и т. Д.

Какой самый быстрый / простой способ сделать это?

Ответы [ 4 ]

24 голосов
/ 08 марта 2012

попробуй hg grep Example *.php

hg grep [OPTION]... PATTERN [FILE]...

search for a pattern in specified files and revisions

    Search revisions of files for a regular expression.

    This command behaves differently than Unix grep. It only
    accepts Python/Perl regexps. It searches repository
    history, not the working directory. It always prints the
    revision number in which a match appears.

    By default, grep only prints output for the first
    revision of a file in which it finds a match. To get it
    to print every revision that contains a change in match
    status ("-" for a match that becomes a non-match, or "+"
    for a non-match that becomes a match), use the --all
    flag.

options:

 -0 --print0              end fields with NUL
    --all                 print all revisions that match
 -f --follow              follow changeset history, or file
                          history across copies and renames
 -i --ignore-case         ignore case when matching
 -l --files-with-matches  print only filenames and revisions
                          that match
 -n --line-number         print matching line numbers
 -r --rev                 search in given revision range
 -u --user                list the author (long with -v)
 -d --date                list the date (short with -q)
 -I --include             include names matching the given
                          patterns
 -X --exclude             exclude names matching the given
                          patterns

use "hg -v help grep" to show global options
5 голосов
/ 30 июня 2016

Выбранный ответ неполон: hg grep --all --files-with-matches 'PATTERN' [FILES] обычно то, что вы хотите.

0 голосов
/ 15 августа 2018

Вы хотите использовать флаг --diff (--all устарел) hg grep. Он выполняет поиск в файлах различий, а не в содержимом самого файла. В результате вы получите все наборы изменений / ревизии, в которых слово Пример появилось или было удалено.

Теперь, чтобы получить первый удар, вам нужно передать его в порядке ревлогов через флаг -r. То есть ревизии будут искать от 0 до чаевых. ( -r 0: подсказка )

А для файлов .php вы должны передать флаг -I, который предназначен для шаблонов имен файлов.

Итак, ваша команда будет:

hg grep --all -r 0:tip "Example" -I "*.php"
0 голосов
/ 08 марта 2012
hg help filesets
...
"grep(regex)"
      File contains the given regular expression.

hg locate "set:grep(Example) and **.php"

или

hg locate "set:**.php and (**Example*)"

...