web-dev-qa-db-ja.com

なぜgit logは移動されたファイルの履歴を表示しないのでしょうか?それについてどうすればよいですか?

git mvを使用していくつかのファイルの名前を変更し、git stashを使用し、HEAD(変更せずに))を見てからgit stash popを実行しました私の動きはコミットリストから消えていたので、git rmでそれらをやり直し、コミットメッセージはgitが名前の変更が名前の変更であると見つけたと主張しました。

しかし、今、コミット後、移動したファイルの履歴を取得できません!問題のコミットについてgitが言ったことは次のとおりです。

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

私は現在、これらの移動されたファイルのいずれかの履歴を取得しようとしているので、古いバージョンを見ることができますが、非常に有用なものは何も得られません:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

-M-C--find-copies-harderなしでも試しましたが、役に立ちませんでした。)

古い名前で履歴を取得できますが、古い場所から削除された時点で停止します。

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

だから、今回は完全に立ち往生しているわけではないが、この種のことを常にしなければならないのは気に入らないだろう。 (かなりの数のファイルが一生に一度は移動すると予想しています。)

私は何か間違っていますか?ファイルの古いコピーと新しいコピーは同じ98.8%です(166行のうち2行が変更されています)。私の理解では、この場合、gitはファイルを追跡できるはずです。なぜなら、それは明示的に保存するのではなく名前変更操作を推測し、ファイルは十分に類似しているため、同じと見なすべきだと思うからです。

これを修正するためにできることはありますか?

79

問題を正確に解決していなくても、自分の懸念を和らげることができたので、自分の質問に答えます。 (git log --followはまだ機能しません。)

まず、名前変更コミットの--summaryログには、ファイルの古い名前を持つdelete行が含まれます。そのため、見つけやすい場合は、そこから古い名前とgit logを見つけることができます。

大規模なコミットの一部であり、したがって、見つけるのが少し難しい-そして、この状況が私の心配の1つであった場合-git blame -Cは、最初の名前変更後のリビジョンでファイルの新しい名前で使用できます。おそらく、元のファイルの行が残っています! -gitはソースを見つけ、古いファイル名(および適切な測定のためのコミットハッシュ)を表示する必要があります。その後、git logで証跡を取得できます。

そのため、(何らかの理由で)ユニットとしてのファイルの履歴に興味がある場合は、比較的簡単に実行できるようです。私はgitがあなたがそれを適切に使用することを好むという印象を受けますが。

14

ファイルでgit log --followを試してください。ここから学ぶ gitでファイルを移動/名前変更し、履歴を維持することは可能ですか?

103
liang

まあ、git log -M --summary ..

25
user502515
git log --follow ./path/to/file

これがあなたが探しているものだと思います。

7
janetkuo