それは少しずさんだが、次のスクリプトは、もはや存在しないファイルから始まる名前の変更履歴をトレースします。
#!/bin/sh
file=$1
while true
do
# find the commit in which $file disappeared
revhash=$(git log --pretty=%H --diff-filter=D -n 1 $revspec -- $file)
# break out if $file has not disappeared since $revhash
test -z "$revhash" && break
revspec=${revhash}..
echo -n "$revhash renamed $file => "
# $revhash corresponds to the commit in which $file was removed, i.e. renamed
# so we combine grep, cut, sed, and diff-tree to figure out what it was renamed to
file=$(git diff-tree -M --numstat $revhash | grep '=>' | cut -f3- | sed "s/\(.*\){\(.*\) => \(.*\)}\(.*\)/\1\2\4 => \1\3\4/;s/\/\//\//g" | grep $file | sed "s/.* => //")
echo "$file"
test -z "$file" && echo -e "???\nNo rename target found, presumably file was deleted." && break
done
をして、あなたがその歴史をトレースするためにあなたに返された最後のファイル名をgit log --follow
することができます。
'--follow'と' --reverse'を 'git log'に組み合わせることができます。あなたはできるはずですが、できません。 – torek
'git log --diff-filter = D - drivers/usb/gadget/u_serial.c'です。現在の名前を知っているなら '--followと--diff-filter = R'が必要です。 '--'の後ろに古い名前や現在の名前があっても' --follow'と '--diff-filter = RD'の両方で動作します。 – ElpieKay