如何对Mercurial存储库进行全文索引?

Lór*_*tér 11 mercurial kiln atlassian-fisheye

什么时候做hg log -k不够,而且hg grep太慢了(cca.100k变更集)?我们对Fisheye的经历非常糟糕(方式太慢),而Kiln似乎把我们带入FogCreek帝国只是有点太多了.

还有哪些其他选项可以在存储库上提供全文搜索功能?

Ry4*_*ase 2

您在全文搜索中寻找什么?如果您想知道添加文本时的修订版,那就更容易了,如果您想知道其中存在文本的所有修订版,那就更大了。

一般来说hg grep,无需预先构建索引,或者至少预先构建可以使用传统 grep 的版本化文件,即可达到最快的速度。

如果您愿意预先构建可 grepable 文件结构,您可以执行以下操作:

hg export -o 'changeset-%r-%h.patch --rev 0:tip
Run Code Online (Sandbox Code Playgroud)

这会将每个变更集导出到适合使用普通命令行 grep 进行 grep 或使用 lucene 或类似工具进行索引的文本文件。您可以轻松地用钩子保持当前状态changeset

仅通过更改集差异,您可以查找添加或删除文本的修订,但无法查找该文本存在的所有修订的列表。为此,您可以在每次修订时预先创建每个文件的副本,但即使很容易实现自动化,这也会占用大量空间。

如果您正在寻找发生了某些事情的特定修订版,另一个选择是确保您熟悉hg bisect. 它会自动为您进行二进制搜索,因此如果您想找到包含该字符串的第一个版本,CHEESE您可以执行以下操作:

hg bisect --command "grep -s CHEESE" # might need to reverse the exit code of grep -s
Run Code Online (Sandbox Code Playgroud)

尽管这会更新您的工作目录,但hg grep不会。