拥有大量提交的回购。我知道文件的名称,以及事物(一个字符串,一些准确的系数)我正在寻找,但我不知道是什么提交它。它不再是当前的一,这是肯定的,也不是以前的几个。
* 如何在时间上搜索 ,对于指定文件中的某个 thing (或整个回购中,我不知道)不关心,所以它会经过所有提交,直到找到它为止?*
对mercurial& amp;饭桶。目前使用两者,我真的不知道其中任何一个是否可行。
答案 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来说,这个相关的问题似乎是相关的:
答案 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(共同)更容易