Стандартный подход, как вы говорите, заключается в создании нового коммита, который фиксирует окончания строк и, следовательно, меняет каждую строку каждого файла. Однако, поскольку у вас недавно перенесенный репозиторий, может быть более целесообразно переписать все коммиты, чтобы в них были правильные окончания строк. Вы можете сделать это с помощью git rebase
или git filter-branch
. Делать это с rebase - это, по сути, ручной процесс, но фильтр-ветвь использует предоставленный вами скрипт. Ваш скрипт может делать все, что захочет, ко всему дереву, и результат будет сохранен как новая версия коммита.
Точные детали скрипта будут зависеть от вашей конкретной ситуации, потому что вы не захотите пытаться изменить окончания строк двоичных файлов. Однако, если вы знаете шаблоны имен файлов, вы можете использовать команду find
, чтобы сгенерировать список всех соответствующих файлов в дереве, и использовать ее с командой xargs
, чтобы запустить на них fromdos
для преобразования окончания строки. Например:
#!/bin/sh
find . \( -name '*.cpp' -o -name '*.h' \) -print0 | xargs -0 fromdos
Обратите внимание, что вы должны запускать скрипт для каждого коммита, потому что git хранит файлы целиком, а не diffs.
И обязательно сделайте резервную копию вашего каталога .git
заранее, на случай, если все пойдет не так!