2016-05-09 6 views
1

gitのバージョン管理では、コミットのために、元々誰(どのユーザ)が削除された行をコミットしているのかを知りたいと思います。与えられたgitコミットに対して、削除された行のコードをwho(どのユーザ)がコミットするのか?

どうすればこのファイルを見つけることができますか?

アップデート:多くのgitコミットについてこれをチェックしたいと思います。したがって、グラフィカルインタフェースを使用することは選択肢ではありません。私はpythonスクリプトでこのプロセスを自動化するgitコマンド(または連続コマンド)を探しています。 https://git-scm.com/docs/git-blame

git blameがファイルを受け入れ、最後の行を変更したリビジョンからの情報で指定したファイルの各行をアノテート:

+1

コミットで行を削除した人は、コミットした人と同じです。私はそれがあなたが求めているとは思わない。明確にできますか? – Schwern

+0

特定のコミットを使用すると、リポジトリで削除または追加されたコードの行を知ることができます。削除されたコード行は、元々リポジトリに異なるコミットで追加された別の人物に属します。そのユーザーを探したい 十分明確であることを願っています。 –

+0

私があなたを正しく理解していれば、もともと削除された行を誰が追加したのかを知りたいでしょうか? – Schwern

答えて

1

あなたがGitの非難を利用することができます。必要に応じて、指定されたリビジョンからアノテーションを開始します。

その他の場合は、gitkのようなグラフィカルツールを使用して、コミットの内容と変更内容を確認できます。

+0

Git blameは指定されたファイル名で動作し、指定されたバージョンでは機能しません。 正確なコマンドを私に送ってください。 与えられたバージョンでは、リポジトリに与えられたコミットの削除された行を最初に誰が追加したのかを知りたいと思います。 –

+0

'call someUniqueLine'行が' filename'の '54e872ea'によって削除された場合、親コミットのその行の責任は ' git blame filename -L '/^call someUniqueLine /'、+ 1 54e872ea^' – Steve

+0

ファイルに対するコミット(すべてのコミットの履歴)とその変更を表示したい場合は、gitkをインストールすることが問題ではない場合は、' gitk 'を使うことができます。 – RaviTezu

3

私が質問を正しく理解していれば、最初に削除された行を最初に追加した人を探したいでしょうか?たとえば、this commitには、=head1 C<import>という行が削除されています。誰が最初にその行を書きましたか?

--- a/lib/perl5i.pm 
+++ b/lib/perl5i.pm 
@@ -1118,27 +1118,29 @@ Example: 
    from CPAN or another repository. Your library paths are: 
     Indented list of paths, 1 per line... 

-=head1 C<import> 

-This subroutine is called automatically, see L<perlfunc/import>. 
+=head1 Turning off features 
... 

コマンドはgit blameです。これは、どの行が最後に変更されたかを表示します。この例では、git blame lib/perl5i.pmは、ファイルの各行に最後に触れたユーザーを示します。

b755dda5 (Michael G. Schwern  2009-04-22 21:29:08 -0700 1) package perl5i; 
b755dda5 (Michael G. Schwern  2009-04-22 21:29:08 -0700 2) 
8baa7538 (Michael G. Schwern  2010-01-29 21:34:14 -0800 3) ###################################### 
a6231688 (Michael G. Schwern  2010-03-14 13:55:50 -0700 4) # The real code is in perl5i::2  # 
8baa7538 (Michael G. Schwern  2010-01-29 21:34:14 -0800 5) # Please patch that     # 
8baa7538 (Michael G. Schwern  2010-01-29 21:34:14 -0800 6) ###################################### 
... 

これは、コミット、作成者の名前、コミットが発生したときとその行です。

これは必ずしもその行の元の著者ではありません。単純な空白の変更を行うコミットさえ表示されます。これを避けるには、空白の変更を無視するように-wを追加します。 git blame -w lib/perl5i.pm

しかし、それは現在のコミットです。特定のコミットの責任を問うことができます。この例では、4519fb29cefが削除されています。 git blame -w lib/perl5i.pm 4519fb29cefを実行した場合、その行はすでに削除されているので、その行為は責任を問わず表示されます。代わりに、前回のコミット時にgit blameを実行します。 git blame -w lib/perl5i.pm 4519fb29cef^

... 
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯  2013-03-01 11:16:27 +0100 1121) =head1 C<import> 
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯  2013-03-01 11:16:27 +0100 1122) 
4afdb783 (Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯  2013-03-01 11:16:27 +0100 1123) This subroutine is called automatically, see L<perlfunc/import>. 
... 

は最後のその行に触れLars Dɪᴇᴄᴋᴏᴡ 迪拉斯によって4afdb783をコミットします。時には変更が些細なものになることがあるので、それが重要な変更であることを確認するためにgit log -p 4afdb783を実行してください。そうでなければ、同じことをやり直してください。その前にコミットにgit blameを実行してください。git blame -w 4afdb783^。重要な変更が生じるまで続けます。

+0

私の質問に包括的な回答をいただきありがとうございます。私はこのプロセスを自動化し、多くのgitコミットのためにそれを実行する必要があります。したがって、git blameは、削除された行のコードに関する情報を必要とし、指定されたコミット内の削除された行のみを対象にするため、問題を解決できません。 私はこの情報を手動でフィードする必要があり、このプロセスをスクリプトで自動化することはできません。 –

+0

@MohsenLaaliできますよ。 4afdb783をコミットする前にfoo.txtの最後の行45を変更したことを知りたければ 'git blame -L45,45 foo.txt 4afdb783 ^'を実行します。 '-p'を追加して、マシンフレンドリな形式にします。 – Schwern

+0

コメントありがとうございます。 私はまだ行番号とファイル名を入れておく必要があります。削除された行と影響を受けたファイルは、特定のコミットでマシンフレンドリな形式で見つけることができますか? これらのコマンドをgit blameと接続して質問に答えることができます。 –

関連する問題