7

既存のプロジェクトで大量のファイルを移動しようとしています。これを行う前に、複数ファイルの履歴を持つコードを分析するために使用されるいくつかの手法をしっかりと把握したいと思います。

gitを使用して「このコード行はどこから来たのですか?」と尋ねるにはどうすればよいですか?コンテンツがその存続期間中に複数のファイルを移動したときはどうなりますか?

gitが(正当な理由で)名前の変更を明示的に追跡しないことを知っているので、これを尋ねることができるはずですが、方法がわかりません。これを視覚化する方法があれば、それも知っておくとよいでしょう。

4

2 に答える 2

5

gitツールボックスで3つのツールを確認することをお勧めします。最初のものは非難であり、それはcvsの場合とほとんど同じです。ファイルの各行に最後に触れたコミットが表示されます。以前に何があったかを確認したい場合は、行に触れたコミットを取得して、前のコミットを確認できます。

git show <sha1_of_interesting_commit>^ -- file/path

あなたはその前に何が起こったかを見るために非難を繰り返すことができます。

git blame <sha1_of_interesting_commit>^ -- file/path

2番目のツールは、--follow名前変更を過ぎたファイルを追跡するために使用しています。

git log --follow -- file/path

3番目(そしておそらく最も便利なツール)は、ログに記録するつるはしオプションです。これは、特定のテキストを含む削除、導入、または変更された行の変更を履歴で検索します。これは、関数名などを追跡する場合に特に便利です。特定のコミットのファイルで新しい可能性がありますが、別のソースファイルからのものでしたか?それへの呼び出しは同時に追加されましたか、それとも移動する前に追加されましたか?

git log -S"Interesting_Function"

パッチまたは統計オプション(-pまたは)を使用している場合、変更全体が表示される場所--statも使用しない限り、出力は、変更が実際に検索文字列に関係しているファイルに制限されます。--pickaxe-all

git grep文字列の現在の出現箇所をすべて表示するために組み合わせると、つるはしは非常に便利な履歴マイニングツールです。

于 2010-01-19T20:15:29.020 に答える
0

git blame「このコード行はどこから来たのですか?」と尋ねるのに使用するものは何ですか。名前の変更を処理するかどうかはわかりません。おそらくそうです。

于 2010-01-19T19:45:58.887 に答える