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

时间:2010-10-21 05:45:03

标签: mercurial posix file-ownership

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 个答案:

答案 0 :(得分:3)

如果您使用的是hg的新版本,则可以使用revsets来实现这一目标:

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

(您可能需要更改其转义,具体取决于您的shell。)

adds函数查找添加了给定文件的更改集。还有很多其他功能;有关详细信息,请参阅revsetshg help revsets

答案 1 :(得分:0)

通过将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将返回所有文件,因此如果您在工作目录中有目标文件或其他未跟踪文件,则会不必要地对它们运行hg log

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

答案 2 :(得分:0)

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

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

正如我在#mercurial

中的krigstask所建议的那样

也快9秒:)