Ecco una soluzione che combina quelle di Noufal e Claytontstanley ed evita di toccare file che non cambieranno.
Nel [alias]
blocco del mio ~/.gitconfig
file:
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
Per utilizzare:
git psed old_method_name new_method_name
Grazie sia a Noufal che a Greg per i loro post. Ho combinato le loro soluzioni e ne ho trovato uno che utilizza git grep (più robusto di git ls-files per il mio repository, poiché sembra elencare solo i file che contengono il codice src effettivo, ad esempio non le cartelle del sottomodulo), e ha anche il vecchio nome del metodo e il nuovo nome del metodo in un solo posto:
Nel [alias]
blocco del mio ~/.gitconfig
file:
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
Per utilizzare:
git sed 's/old-method-name/new-method-name/ig'
Potresti usare git ls-files
in combinazione con xargs
e sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
Potresti fare 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
inseriscilo in un file da qualche parte e poi alias come git sed
nella tua configurazione.
Aggiornamento: Il commento di tchrist qui sotto è una soluzione molto migliore poiché impedisce a perl di generarsi ripetutamente.