Aquí hay una solución que combina las de Noufal y Claytontstanley y evita tocar archivos que no cambiarán.
En el [alias]
bloque de mi ~/.gitconfig
archivo:
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
Para usar:
git psed old_method_name new_method_name
Gracias a Noufal y Greg por sus publicaciones. Combiné sus soluciones y encontré una que usa git grep (más robusto que git ls-files para mi repositorio, ya que parece enumerar solo los archivos que tienen código src real en ellos, no carpetas de submódulos, por ejemplo), y también tiene el nombre del método anterior y el nombre del nuevo método en un solo lugar:
En el [alias]
bloque de mi ~/.gitconfig
archivo:
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
Para usar:
git sed 's/old-method-name/new-method-name/ig'
Podrías usar git ls-files
en combinación con xargs
y sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
Podrías hacer un
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
pegue eso en un archivo en algún lugar y luego alias como git sed
en tu configuración
Actualización: El comentario de tchrist a continuación es una solución mucho mejor ya que evita que perl se reproduzca repetidamente.