Mercurial的功能历史记录

use*_*759 8 svn mercurial dvcs function

我希望能够在我的代码中获得函数或特定文本块的完整历史记录.

我知道我可以在特定文件中拥有所有提交的差异,但我只想跟踪文件中特定小块文本的生命(例如C++函数).

我希望看到它在过去的版本中发生变化,无论是在文件内移动还是移动到另一个文件,甚至是重命名(重命名时其余功能保持或多或少相同)

我听说Mercurial可以轻松地做到这一点,因为它记录了正确的历史记录,但是我不记得我在哪里(在我的梦中?)我找不到任何工具或方法来做到这一点,除了传统的历史和差异工具.也许我不搜索正确的关键字......任何人都可以提供帮助吗?

谢谢

PS:我还在其他项目中使用SVN,如果有人知道用SVN完成同样的事情的方法,我也接受它:-)

Ida*_*n K 5

这实际上是完全可行的hg grep。一个例子就说明了一切:

$ hg grep 'def revrange' --all
mercurial/cmdutil.py:14319:-:def revrange(repo, revs):
mercurial/scmutil.py:14319:+:def revrange(repo, revs):
mercurial/cmdutil.py:3707:-:def revrange(ui, repo, revs):
mercurial/cmdutil.py:3707:+:def revrange(repo, revs):
mercurial/cmdutil.py:3090:+:def revrange(ui, repo, revs):
mercurial/commands.py:3090:-:def revrange(ui, repo, revs):
mercurial/commands.py:2331:-:def revrange(ui, repo, revs, revlog=None):
mercurial/commands.py:2331:+:def revrange(ui, repo, revs):
mercurial/commands.py:705:-:def revrange(ui, repo, revs = [], revlog = None):
mercurial/commands.py:705:+:def revrange(ui, repo, revs, revlog=None):
mercurial/commands.py:697:-:def revrange(ui, repo, revs = [], revlog = None):
mercurial/commands.py:697:+:def revrange(ui, repo, revs, revlog=None):
mercurial/commands.py:580:+:def revrange(ui, repo, revs = [], revlog = None):
Run Code Online (Sandbox Code Playgroud)

我要求hg找到def revrange(函数定义)。与--all标志 to结合使用grep,这将打印包含匹配状态更改的每个修订。

所以我们可以很容易地看到这个函数的演变:

  • 它首次在修订版 580 中引入,commands.py
  • 第697章 删除了默认的转速参数
  • 705 好像是合并
  • 第2331章
  • 第3090章cmdutil.py
  • 第3707章 删除了ui参数
  • 最后,14319将该功能移至scmutil.py

当然,这并不完美,因为如果函数被重命名,链将在重命名后结束。但根据您的特定用例,这可能就足够了。

为了更复杂,您可以编写一个相对简单的脚本,甚至可以遵循重命名。


Tyl*_*ith 0

通过查看增量和/或 hg 日志,它似乎无法满足您的要求,或者没有足够的信息来编写脚本来正则表达式输出信息。如果您愿意,您可以查看一段时间内文件发生的更改,并搜索您要查找的内容。