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

Mercurial:如何找到文件的创建者?,mercurial,posix,file-ownership,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 当某人将文件移动到新名称时,是的,他是该新文件的创建者,但不是他移动的代码的创建者。我可以从第一次提交中提取修订号,并以某种方式检查此文件是否已重命名。。(听起来很复杂) 我只是想知道它,出于某种原因:),因为我们的项目中没

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


我只是想知道它,出于某种原因:),因为我们的项目中没有代码所有权,所以这并不重要…:)

通过将
hg log
命令更改为:

hg log -r : -l 1 $i --template "{files} {author} {rev}\n"
-r:
反转日志输出的顺序,
-l 1
仅显示日志中的第一个条目;它们一起显示了
$i
中任何文件名的最早版本。
--template
开关自定义输出,在本例中,我将显示文件名、作者和引入文件的版本。有关更多信息,请参阅hg帮助模板制作

另一个优化是使用通过
xargs
管道传输的
hgmistest
的输出
find-typef
将返回所有文件,因此如果工作目录中有目标文件或其他未跟踪的文件,则不必要地对它们运行
hg log


不幸的是,在没有告诉Mercurial的情况下,这无法帮助您找到人们复制文件的位置。

如果您使用的是新版的
hg
,您可以使用它使复制变得非常简单:

hg log -r 'adds(\"path/to/file\")'
(根据shell的不同,您可能必须更改其转义。)


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

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

hg log -r 'first(file("path/to/file"))' --template '{author}\n'
正如我在《mercurial》中所说的那样


也快了9秒:)

Mercurial记录的重命名/移动是作为重命名/复制/移动还是作为新文件的添加?我不能保证也希望每个开发人员都会使用“hg mv”Excellent!,我刚刚为它创建了一个mercurial backport:D,太好了。但是如果我看对了,即使使用了hg mv,跟踪也会在文件重命名时结束:(.不幸的是,我发现没有比添加更好的函数,但是命令行比上面的更简单。.添加
-f
将使Mercurial在重命名过程中跟踪历史。