Git не имеет встроенной операции «пакетного переименования», но это не имеет значения: вы можете выполнить пакетное переименование, как вам нравится, затем git add
новые имена и git add -u
, чтобы забрать удаление (все ) старые имена или просто git add
старые имена по отдельности. То есть:
$ git mv old new
имеет точно такой же эффект, как:
$ mv old new
$ git add old new
Чтобы продемонстрировать, я фактически выполнил две вышеупомянутые команды во временном тестовом репозитории, и теперь я запускаю git status
:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: old -> new
ответ Книттла , конечно, хорошо, но я также хотел бы показать, как я склонен выполнять задачи сам:
$ echo *.txt | sed 's/\(.*\).txt/git mv \1.txt \1.md/'
git mv a.txt b.txt a.txt b.md
Упс, это было неправильно, мне нужно одно имя файла на строку ... давайте попробуем это:
$ printf %s\\n *.txt | sed 's/\(.*\).txt/git mv \1.txt \1.md/'
git mv a.txt a.md
git mv b.txt b.md
Вот, что я хотел, теперь, чтобы действительно это сделать, наберите control-P и добавьте | sh
:
$ printf %s\\n *.txt | sed 's/\(.*\).txt/git mv \1.txt \1.md/' | sh
Другими словами, мне нравится писать однострочный сценарий для генерации команд, которые должны быть запущены, а затем повторно запускать однострочный сценарий с выводом, перенаправленным в канал sh
для их запуска. Если однострочный сценарий помогает мне, но в некоторых случаях требуется ручная настройка, я заменяю | sh
на > /tmp/doit.sh
, а затем редактирую сценарий /tmp/doit.sh
, чтобы выполнить ручную настройку.