Inilah solusi yang menggabungkan solusi dari Noufal dan claytontstanley serta menghindari menyentuh file yang tidak akan berubah.
Di [alias]
blok ~/.gitconfig
saya berkas:
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
Untuk menggunakan:
git psed old_method_name new_method_name
Terima kasih kepada Noufal dan Greg untuk postingan mereka. Saya menggabungkan solusi mereka, dan menemukan satu yang menggunakan git grep (lebih kuat daripada file git ls untuk repo saya, karena tampaknya hanya mencantumkan file yang memiliki kode src aktual di dalamnya - bukan folder submodule misalnya), dan juga memiliki nama metode lama dan nama metode baru hanya di satu tempat:
Di [alias]
blok ~/.gitconfig
saya berkas:
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
Untuk menggunakan:
git sed 's/old-method-name/new-method-name/ig'
Anda bisa menggunakan git ls-files
dikombinasikan dengan xargs
dan sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
Anda bisa melakukan
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
tempelkan itu di file di suatu tempat dan kemudian alias sebagai git sed
di konfigurasi Anda.
Perbarui: Komentar oleh tchrist di bawah ini adalah solusi yang jauh lebih baik karena mencegah perl muncul berulang kali.