これは、Noufal と claytontstanley のものを組み合わせて、変更されないファイルに触れないようにするソリューションです。
[alias]
で ~/.gitconfig
のブロック ファイル:
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
使用するには:
git psed old_method_name new_method_name
Noufal と Greg の投稿に感謝します。私はそれらのソリューションを組み合わせて、git grep を使用するものを見つけました (たとえば、サブモジュールフォルダーではなく、実際の src コードを含むファイルのみをリストしているように見えるため、レポの git ls-files よりも堅牢です)。古いメソッド名と新しいメソッド名を 1 か所に:
[alias]
で ~/.gitconfig
のブロック ファイル:
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
使用するには:
git sed 's/old-method-name/new-method-name/ig'
git ls-files
を使用できます xargs
と組み合わせて そして sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
を行うことができます
for i in $(git grep --full-name -l old_method_name)
do
perl -p -i -e 's/old_method_name/new_method_name/g' $i
done
それをファイルのどこかに貼り付けて、 git sed
としてエイリアスします あなたの設定で。
更新: 以下の tchrist によるコメントは、perl が繰り返しスポーンするのを防ぐため、より優れた解決策です。