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

の新しいバージョンを使用している場合は、 revsetshgを使用してこれを非常に簡単にすることができます。

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

(シェルによっては、そのエスケープを変更する必要がある場合があります。)

このadds関数は、指定されたファイルが追加された変更セットを見つけます。他にもたくさんの機能があります。詳細については、 revsetまたはhg help revsetsを参照してください。

于 2010-10-21T14:50:48.690 に答える
0

著者情報のみが必要な場合は、行うことができます

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

#mercurial で krigstask によって提案されたように

9秒も速い:)

于 2013-05-30T10:10:43.497 に答える
0

hg logコマンドを次のように変更することで、物事をもう少し効率的にすることができます。

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

はログ出力の-r :順序を逆にし、 はログ-l 1の最初のエントリだけを表示します。一緒に、それらは、ファイル名が$i. スイッチは出力をカスタマイズします。--templateこの場合、ファイル名、作成者、およびファイルが導入されたリビジョンを表示しています。詳細については、を参照hg help templatingしてください。

もう 1 つの最適化は、hg manifestpiped throughの出力を使用することxargsです。 find -type fはすべてのファイルを返すため、作業ディレクトリにオブジェクト ファイルまたはその他の追跡されていないファイルがある場合hg log、それらを不必要に実行することになります。

残念ながら、これは、Mercurial に通知せずに他のユーザーがファイルをコピーした場所を見つけるのに役立ちません。

于 2010-10-21T14:33:49.043 に答える