【问题标题】:Generating a list of directories containing files changed between revisions生成包含在修订之间更改的文件的目录列表
【发布时间】:2019-10-14 11:45:56
【问题描述】:

我从this answer 知道我可以做到

hg status --rev x:y

列出已在修订版xy 之间更改的文件。有没有办法不获取单个文件,而只获取它们所在的目录?

例如,如果上面的命令会产生

A Foo\Bar\SomeFile.txt
A Foo\Bar\AnotherFile.cs
M Baz\AnotherFile.txt

我想得到

Foo\Bar
Baz

改为。

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    不是现成的解决方案(见尾注),只是提示

    • 您可以使用模板更改hg st 的输出格式,因为它可以用于任何“类似日志”的 hg 命令(请参阅-T 选项)
    • 在模板中,您可以使用过滤器“dirname”过滤输出(文件名),这将去除文件的文件名部分

    但我尝试过并发现(在我的回购中)一些“奇怪”(以及 预期麻烦)

    尾注:

    1. 虽然hg st 的默认输出会消除结果中的重复文件名(如果它们出现),但您的模板不会(同样,“默认情况下”)
    2. 我看到相同状态范围的模板输出结果错误(完全错误)

    不错

    >hg st --rev 1170:tip
    M hggit\__init__.py
    M hggit\compat.py
    M hggit\git_handler.py
    M hggit\gitdirstate.py
    M hggit\hg2git.py
    M tests\test-illegal-contents.t
    

    我的

    >hg st --rev 1170:tip --template "{files % '{file}\n'}"
    hggit/__init__.py
    hggit/__init__.py
    hggit/__init__.py
    hggit/__init__.py
    hggit/__init__.py
    hggit/__init__.py
    

    (六次文件仅来自提示而不是范围)

    1. 即使使用hg log -T 而不是 st(提供所有文件),您也会从第 1 页遇到问题:“同一文件的输出中有多个文件条目”李>

    【讨论】:

    • 您对模板的想法对我有用。我可以通过 shell(在我的例子中是 PowerShell)过滤掉重复项,如下所示:hg status --rev 1:^ --template "{files % '{file|dirname}\n'}" | Sort-Object -Unique
    • @ThomasSchremser - 很好。您现在可以 a) 为简单起见将此命令转换为 shell 别名 b) 可以为 repo-root 添加条件输出“/”而不是“”/只是为了更好的可读性/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2014-09-14
    • 2011-11-05
    相关资源
    最近更新 更多