1

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

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

我只是想知道它,出于某种原因:),因为我们在我们的项目中没有代码所有权,所以无论如何都没关系...... :)

4

3 回答 3

3

如果您使用的是 的新版本hg,则可以使用revsets使这变得超级简单:

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

(您可能必须更改它的转义,具体取决于您的外壳。)

adds函数查找添加给定文件的变更集。还有很多其他功能;请参阅修订集hg help revsets了解更多信息。

于 2010-10-21T14:50:48.690 回答
0

您可以通过将hg log命令更改为:

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

-r :颠倒日志输出的顺序,只-l 1显示日志中的第一个条目;它们一起显示了$i. 开关自定义输出,在这种--template情况下,我显示文件名、作者和引入文件的修订版。有关hg help templating更多信息,请参阅。

另一个优化是使用hg manifestpiped through的输出xargsfind -type f将返回所有文件,因此如果您在工作目录中有目标文件或其他未跟踪的文件,您将hg log不必要地在它们上运行。

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

于 2010-10-21T14:33:49.043 回答
0

如果您只需要作者信息,您可以这样做

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

正如 krigstask 在#mercurial 中建议的那样

也快了 9 秒 :)

于 2013-05-30T10:10:43.497 回答