Voici une solution qui combine celles de Noufal et claytontstanley et évite de toucher à des fichiers qui ne changeront pas.
Dans le [alias]
bloc de mon ~/.gitconfig
fichier :
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
Pour utiliser :
git psed old_method_name new_method_name
Merci à Noufal et Greg pour leurs messages. J'ai combiné leurs solutions et en ai trouvé une qui utilise git grep (plus robuste que git ls-files pour mon référentiel, car il semble ne répertorier que les fichiers contenant le code src réel - pas les dossiers de sous-modules par exemple), et a également l'ancien nom de méthode et le nouveau nom de méthode en un seul endroit :
Dans le [alias]
bloc de mon ~/.gitconfig
fichier :
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
Pour utiliser :
git sed 's/old-method-name/new-method-name/ig'
Vous pouvez utiliser git ls-files
en combinaison avec xargs
et sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
Vous pourriez faire 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
collez-le dans un fichier quelque part, puis aliasez-le en tant que git sed
dans votre config.
Mise à jour : Le commentaire de tchrist ci-dessous est une bien meilleure solution car il empêche perl de se reproduire à plusieurs reprises.