如何搜索回购的历史记录?

时间:2011-11-11 20:40:09

标签: git mercurial

拥有大量提交的回购。我知道文件的名称,以及事物(一个字符串,一些准确的系数)我正在寻找,但我不知道是什么提交它。它不再是当前的一,这是肯定的,也不是以前的几个。

* 如何在时间上搜索 ,对于指定文件中的某个 thing (或整个回购中,我不知道)不关心,所以它会经过所有提交,直到找到它为止?*

对mercurial& amp;饭桶。目前使用两者,我真的不知道其中任何一个是否可行。

4 个答案:

答案 0 :(得分:3)

Mercurial有grep命令。来自文档:

  

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

     

在指定的文件和修订中搜索模式

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.

对于Git来说,这个相关的问题似乎是相关的:

How to grep (search) committed code in the git history?

答案 1 :(得分:2)

Git也有grep命令。

git grep regex $(git rev-list --all) file

有关更多搜索方式,请参阅How to grep (search) committed code in the git history?

答案 2 :(得分:1)

使用git,您可以使用镐搜索。 git log有两个有趣的标志:

-S<string>
    Look for differences that introduce or remove an instance of <string>.
    Note that this is different than the string simply appearing in diff
    output; see the pickaxe entry in gitdiffcore(7) for more details.

这使您可以找到添加或删除给定字符串的提交。

-G<regex>
    Look for differences whose added or removed line matches the given
    <regex>.

这使您可以找到添加或删除的行与正则表达式匹配的提交。

您可以通过使用git log过滤-- filename的输出来对特定文件运行此操作,例如git log -Scoeff -- myfile.c

答案 3 :(得分:0)

Mercurial(新鲜)有revsets,这将允许找到任何东西,比使用grep(共同)更容易