2012-06-18 3 views
5

私はコードの行を変更したすべての著者を見つけるしたいと思います。 Git-logはファイルレベルでそれを行うことができます。私はマニュアルページを読んで、git logのような行レベルではできないようです。それを行うにはgitコマンドを使用する方法がありますか、自分でスクリプトを書く必要がありますか?は、これまでのコードの行を変更したすべての著者を見つけるgitのことができますか?

は私の目的のために、私は、コードのすべての行にこれを実行したいと思います。私は私の研究のための著者の訓練データを作るためにこれをやっています。

+2

あなたは、改訂レベルごとの情報を得るために責任を負う/注釈を付けることができます。 「誰がラインを変えたか」は、一度あなたが複数のリビジョンを持ち込むと、あいまいな質問になり始めます。 –

+0

そのポイントは何ですか? –

+0

@Tomasz:特定の行の履歴を検索することは、特にバグがコードベースにどれくらい存在しているのか、特定の関数に触れているのかを見たいときには非常に便利です。 – Christopher

答えて

3

あなたはgit log-S--prettyフラグを組み合わせたいです。 git log manページから

-Sつるはし検索:

-S<string> 
     Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output; 
     see the pickaxe entry in gitdiffcore(7) for more details. 

このフラグは、特定の文字列に対するすべての変更を探します。 Using an example from another SO answer,git log -g -Ssearch_for_thisは「search_for_this」へのすべての変更の履歴を検索します。

は、より良い結果を得るために--prettyとそれを組み合わせます。たとえば、このコマンドは 'foo'の変更履歴を検索し、短縮されたハッシュ、著者、2つのダッシュ、メッセージの最初の行、2つのダッシュ、日付を返します。

$ git log -Sfoo --pretty=format:'%h %an -- %s -- %ad' 
bc34134 Sally Developer -- Fixed all bugs and made all clients happy forever -- Tue Jan 31 17:41:17 2025 -0500 
+0

-Sオプションの後に行の内容を置くことを意味しますか?これは、文字列を変更するコミットを見つけるのに役立ちますが、私はまだ行の以前の形式を見つける必要があり、行の以前のバージョンがなくなるまでメソッドを使用し続けますか? – user1440858

+0

Hmmm。はい。この解決策は、が導入された時点にのみあなたを取得します。その変更を追跡する場合は、動作しません。多分これ? https://github.com/renard/git-line-history Googleで見つけました。それがうまくいくかどうかは分かりませんが、 'git blame'を活用しています。 – Christopher

関連する問題