Подход, который вам придется использовать, зависит от того, насколько публичен ваш репозиторий.
Если вы не возражаете или не заботитесь об изменении всех SHA, потому что вы более или менее единственный, кто его использует, но хотите, чтобы эта проблема разобралась на все времена, вы можете запустить git filter-branch
и применить dos2unix
ко всем файлам в каждом коммите. (Если вы используете хранилище совместно, всем остальным нужно более или менее полностью обновить его, так что это потенциально опасно.)
Так что лучшим вариантом, а также более простым способом было бы изменить его только в текущих заголовках. Это означает, что ваши прошлые коммиты по-прежнему имеют \r\n
концовок, но если вы не делаете большой выбор вишни из прошлого, это не должно быть проблемой. Разумеется, инструменты сравнения могут жаловаться немного чаще, но обычно вы будете сравнивать только с коммитами, находящимися поблизости, поэтому эта проблема разрешается сама собой по мере накопления коммитов.
И окончания строк UNIX стандартны, вы правы в этом. Лучший подход - настроить редактор так, чтобы он писал только эти окончания даже на окнах. В противном случае вы также можете использовать настройку autocrlf
.
Дополнение к части переписывания истории:
В прошлый раз, когда я делал то же самое, я использовал следующую команду, чтобы изменить все файлы на окончание Unix.
#!/bin/bash
all2dos() { find * -exec dos2unix {} \; }
export -f all2dos
git filter-branch -f --tree-filter 'all2dos' --tag-name-filter cat --prune-empty -- --all