【问题标题】:Function history with MercurialMercurial 的函数历史记录
【发布时间】:2011-07-18 22:39:04
【问题描述】:

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

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

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

我听说 Mercurial 可以很容易地做到这一点,这要归功于它对历史的正确记录,但我不记得我是在哪里听到的(在我的梦中?),我找不到任何工具或方法来做到这一点,除了传统的历史和差异工具。也许我没有用正确的关键字搜索...任何人都可以帮忙?

谢谢

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

【问题讨论】:

    标签: svn function mercurial dvcs


    【解决方案1】:

    这实际上对于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):
    

    我让hg 找到def revrange(一个函数定义)。结合 --allgrep 的标志,这将打印包含匹配状态更改的每个修订。

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

    • 它最初是在修订版 580 中引入的,在 commands.py
    • 697 删除了 revs 参数的默认值
    • 705 似乎是合并
    • 2331 删除了 revlog 参数
    • 3090 将函数移至cmdutil.py
    • 3707 移除了 ui 参数
    • 最后,14319 将函数移至scmutil.py

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多