【问题标题】:How to search for filename throughout Mercurial repository?如何在 Mercurial 存储库中搜索文件名?
【发布时间】:2019-10-14 18:54:22
【问题描述】:

我想在我的所有提交/分支中搜索文件名,并找出哪些提交/分支包含该文件名。我不知道该文件将在 repo 的哪个子目录/子目录中。

我试过hg grep <filename>,但这似乎只显示文件包含filename”。

我也看过Mercurial - determine where file was removed?,但如果文件是在不同的分支上创建的,那对我很有帮助。问这个问题的人建议hg log myfile -v,这似乎可以工作,但没有。我知道我的仓库中某处文件存在,因为当我执行find .hg | grep <filename> 时我得到了一些东西,但这并没有告诉我(至少不清楚)哪些提交/分支。

【问题讨论】:

    标签: mercurial


    【解决方案1】:
    1. 您必须阅读 hg help patternshg help filesets 才能为文件编写正确的模式(很可能您会对模式感到满意)
    2. 如果文件存在现在在工作目录中(即被添加但后来被删除),你会发现它hg file <PATTERN>并确定输出的完整路径,见上文(使用的模式)

    >hg file **/test-extra.t tests\test-extra.t

    并使用完整文件名调用hg log

    1. 无论如何hg file 为已删除的文件或仍在 WD 中的文件返回 0)您也可以致电 hg log <FILESET> 并获取历史记录。现有日志太长,将显示已删除的唯一文件名示例

    >hg log set:**/dulwich/tests/__init__.py -Tcompact 223 0b6c08800d16 2009-07-23 08:48 +0100 a delete the dulwich fork we have
    2 c43c02cc803a 2009-04-22 16:59 -0700 schacon added dulwich library and got the script to call it for clone

    1. 如果您的文件集太宽并且(可能)在不同文件夹中包含同名文件,您必须通过调用 log 来验证文件名,其中包含有关文件的更多详细信息,f.e.与-Tstatus

    【讨论】:

      【解决方案2】:
      hg log 'glob:**/<filename>` -Tstatus
      

      似乎完成了这项工作。它没有给我包含&lt;filename&gt; 的提交,但它确实给出了涉及filename 的提交(及其分支)。

      感谢懒獾的回答指出我这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-16
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2010-10-22
        相关资源
        最近更新 更多