2017-02-21 20 views
3

名前を変更する前にコミット状態で過去に名前が変更されたファイルの内容を見たい(自動検出)。名前の変更を検出したgit showファイル(git log --followに相当)

git log --follow foo_renamed.txtgit show master~20 foo_original_name.txt gitがファイルの名前変更を追跡でき、そのファイルがmaster~20に存在することを確認できます。しかし、

git show --follow master~20:foo_renamed.txt 

git show -M master~20:foo_renamed.txt 

両方がで失敗

致命的な:パス 'foo_renamed.txt' はなく、 'マスター〜20' で、ディスク上に存在します。オブジェクトの仕様が<rev>:<path>ブロブですので

これは実際には理にかなっているが、git showには-- /file/pathオプションはありません。その他の方法で?ありがとう。

答えて

2

残念ながら、 git log --followのみが、これらの種類の検出された名前を追跡する特別なケースのハックを実装しています(履歴を調べながら一度にコミットする必要があります)。このタスクにはあまり適していません。

Gitで作業したい場合は、コードを変更して柔軟性を高めるために、git showにオプションを追加することができます。git showは、コミットの子孫であるコミットのIDですしかし、にファイルがあります。 Gitはリビジョンを歩かなければなりません。git logのように、リネームの検出を行いますが(このより柔軟なコードで)、コミットグラフの歩行が表示されるようになるとGitは以前の名前を使うことができます。

呼び出しのようなものかもしれません:

git show --follow[=<start>] commit -- path 

<start>デフォルトHEADへ。しかし、これは重要なことではありません。

(また、git show--followを拒否するべきである。それはすべてでそれを可能にするという事実は、マイナーなバグです)

1

torekがgit showは今それが現在のです。この権利を行うことができないと言うならば、私は信じています状況。

今の私の回避策は次のとおりです。

git show master~42:`git log --follow master~42..master \ 
--name-only --oneline -- path/to/file | tail -n1` 
関連する問題