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
当有人将文件移动到新名称时,是的,他是该新文件的创建者,而不是他移动的代码的创建者。我可以从第一次提交中提取修订号,并以某种方式检查此文件是否已重命名..(听起来非常复杂)
我只是想知道它,出于某种原因:),因为我们的项目中没有代码所有权,无论如何都无关紧要...... :)
答案 0 :(得分:3)
如果您使用的是hg
的新版本,则可以使用revsets来实现这一目标:
hg log -r 'adds(\"path/to/file\")'
(您可能需要更改其转义,具体取决于您的shell。)
adds
函数查找添加了给定文件的更改集。还有很多其他功能;有关详细信息,请参阅revsets或hg 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秒:)