4

git log --follow my/new-file名前変更前後の変更を正しく表示 するファイルの名前を変更しました。

ただし、このコマンドは、以前のバージョンを表示するために機能しません: git show <rev>:my/new-file.

私たちは走らなければなりませんgit show <rev>:my/old-file

my/ old -fileの代わりにmy/ new -file を使用してこのコマンドを実行する方法はありますか?

4

1 に答える 1

3

短い答えは簡単です。不快であれば、いいえです。

ここでの問題は、git show最初に何を表示するかを (git rev-parse多かれ少なかれ 経由で) 解決し、次にそれを表示しgit rev-parse、ファイルをたどろうとして履歴をたどらず、各コミットからその親への差分を実行して、名前の変更のように見えるものを見つけることができます。

git log --followただし、を使用すると、正確にそれが行われます。親コミットと比較して各コミットを調べ、差分を生成し、結果の差分がおそらくその時点でmy/new-file名前が変更されたことを示唆しているかどうかを確認my/old-fileします。その場合、次に古いチェックを調整してmy/old-file.

Git はおそらく、別のプログラム (または のモードgit log) を使用して、一部のファイルが一部のコミット ペアで名前変更されたかどうかを確認し、そうであれば、以前のパスを などの他の git ユーティリティに提供することができますgit show。次に、次のように言うことができます: git show $(git whatwas HEAD <rev> my/new-file)、またはそのようなもの (この仮想git whatwasコマンドの詳細によって異なります)。この回答whatwasで概説した手法を使用して、基本的にこれを実行するスクリプトを作成できます。その過程でさまざまな厄介な詳細が明らかになると思いますが、理論は合理的です。

于 2015-11-25T17:43:06.413 に答える