Finding first appearance of text in Mercurial repository

别来无恙 提交于 2019-12-03 15:14:15

问题


I have a Mercurial repository with ~800 changesets and I need to find the first changeset where the word Example appeared. The word appears inside a .php file and not on a commit comment etc.

What is the quickest/easiest way to do that?


回答1:


try 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



回答2:


The selected answer is incomplete : hg grep --all --files-with-matches 'PATTERN' [FILES] is normally what you want.




回答3:


hg help filesets
...
"grep(regex)"
      File contains the given regular expression.

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

or

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




回答4:


You would want to use the --diff (--all is deprecated) flag of hg grep. It searches the diffs rather than file contents itself, what this would result in is, you would get all the changesets/revisions where the word Example appeared or removed.

Now to get the first hit you need to pass this in revlog order via the -r flag. That is the revisions will be searched from 0 to tip. ( -r 0:tip )

And for the .php files you would want to pass -I flag which is for file name patterns.

So your command will be :

hg grep --all -r 0:tip "Example" -I "*.php"


来源:https://stackoverflow.com/questions/9618763/finding-first-appearance-of-text-in-mercurial-repository

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!