use*_*759 8 svn mercurial dvcs function
我希望能够在我的代码中获得函数或特定文本块的完整历史记录.
我知道我可以在特定文件中拥有所有提交的差异,但我只想跟踪文件中特定小块文本的生命(例如C++函数).
我希望看到它在过去的版本中发生变化,无论是在文件内移动还是移动到另一个文件,甚至是重命名(重命名时其余功能保持或多或少相同)
我听说Mercurial可以轻松地做到这一点,因为它记录了正确的历史记录,但是我不记得我在哪里(在我的梦中?)我找不到任何工具或方法来做到这一点,除了传统的历史和差异工具.也许我不搜索正确的关键字......任何人都可以提供帮助吗?
谢谢
PS:我还在其他项目中使用SVN,如果有人知道用SVN完成同样的事情的方法,我也接受它:-)
这实际上是完全可行的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,这将打印包含匹配状态更改的每个修订。
所以我们可以很容易地看到这个函数的演变:
commands.pycmdutil.pyscmutil.py当然,这并不完美,因为如果函数被重命名,链将在重命名后结束。但根据您的特定用例,这可能就足够了。
为了更复杂,您可以编写一个相对简单的脚本,甚至可以遵循重命名。
通过查看增量和/或 hg 日志,它似乎无法满足您的要求,或者没有足够的信息来编写脚本来正则表达式输出信息。如果您愿意,您可以查看一段时间内文件发生的更改,并搜索您要查找的内容。