代码之家  ›  专栏  ›  技术社区  ›  math

Mercurial:如何找到文件的创建者?

  •  1
  • math  · 技术社区  · 15 年前

    ATM我是这样做的,这是非常缓慢和错误的:

    for i in `find -type f`; do
      echo $i`LANG=C hg log -v $i | grep user | tail -1 | awk '{print " "; print $2}'`;
    done
    

    当有人将文件移动到新名称时,是的,他是该新文件的创建者,但不是他移动的代码。我可以从第一次提交中提取修订号,并不知何故检查该文件是否被重命名。(听起来很复杂)

    我只是想知道,出于某种原因:)因为我们在项目中没有代码所有权,所以不管怎么说,它都无关紧要…:)

    3 回复  |  直到 9 年前
        1
  •  3
  •   Vadim Kotov First Zero    9 年前

    如果您使用的是 hg ,你可以使用 revsets 为了让这一切变得非常简单:

    hg log -r 'adds(\"path/to/file\")'
    

    (根据你的外壳,你可能需要改变它的逃逸方式。)

    这个 adds 函数查找添加给定文件的变更集。还有许多其他功能;请参见 翻新 hg help revsets 更多信息。

        2
  •  0
  •   Niall C.    15 年前

    你可以通过改变你的 hg log 命令:

    hg log -r : -l 1 $i --template "{files} {author} {rev}\n"
    

    这个 -r : 反转日志输出和 -l 1 只显示日志中的第一个条目;它们一起显示文件名的最早版本。 $i . 这个 --template 开关自定义输出,在本例中,我将显示文件名、作者和引入文件的修订版。见 hg help templating 更多信息。

    另一个优化是使用 hg manifest 通过管道 xargs ; find -type f 将返回所有文件,因此如果在工作目录中有对象文件或其他未跟踪的文件,则将运行 汞测井 不必要的。

    不幸的是,如果不告诉Mercurial,这将无法帮助您找到人们复制文件的位置。

        3
  •  0
  •   koda    13 年前

    如果你只需要作者信息,你可以

    hg log -r 'first(file("path/to/file"))' --template '{author}\n'
    

    正如克里格斯塔克在《摩科里亚尔》中所建议的那样

    也快了9秒。)

    推荐文章