Zde je řešení, které kombinuje řešení Noufal a claytontstanley a vyhýbá se dotyku se soubory, které se nemění.
V [alias]
blok mých ~/.gitconfig
soubor:
psed = !sh -c 'git grep --null --full-name --name-only --perl-regexp -e \"$1\" | xargs -0 perl -i -p -e \"s/$1/$2/g\"' -
Použití:
git psed old_method_name new_method_name
Díky jak Noufalovi, tak Gregovi za jejich příspěvky. Zkombinoval jsem jejich řešení a našel jsem jedno, které používá git grep (robustnější než soubory git ls-files pro můj repo, protože se zdá, že uvádí pouze soubory, které v sobě mají skutečný kód src - například ne složky submodulu), a také má název staré metody a název nové metody pouze na jednom místě:
V [alias]
blok mého ~/.gitconfig
soubor:
sed = ! git grep -z --full-name -l '.' | xargs -0 sed -i -e
Použití:
git sed 's/old-method-name/new-method-name/ig'
Můžete použít git ls-files
v kombinaci s xargs
a sed
:
git ls-files -z | xargs -0 sed -i -e 's/old-method-name/new-method-name/g'
Můžete udělat
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
vložte to někam do souboru a pak to pojmenujte jako git sed
ve vaší konfiguraci.
Aktualizace: Komentář od tchrist níže je mnohem lepším řešením, protože zabraňuje opakovanému spawnování perlu.