Мерзавец: Удаление возвратов каретки из управляемых источником файлов

У меня есть репозиторий Мерзавца, который имеет некоторые файлы с форматом DOS (\r\n окончания строки). Я хотел бы просто прокрутить файлы dos2unix (который изменил бы все файлы на формат UNIX, с \n окончания строки), но как плохо это влияло бы на историю, и она рекомендуется вообще?

Я предполагаю, что стандарт должен всегда использовать окончания строки UNIX для управляемых источником файлов, и дополнительно переключаться на определенные для ОС окончания строки локально?

15
задан Jon Seigel 2 April 2010 в 02:41
поделиться

2 ответа

Подход, который вам придется использовать, зависит от того, насколько публично ваше хранилище.

Если вы не возражаете или не заботитесь об изменении всех SHA, потому что вы более или менее единственный, кто его использует, но хотите, чтобы эта проблема всегда решалась, вы можете запустить git filter-branch и примените dos2unix ко всем файлам в каждой фиксации. (Если вы делитесь репозиторием, всем остальным необходимо более или менее полностью обновить его, поэтому это потенциально опасно.)

Таким образом, лучший вариант, а также более простой способ - изменить его только в текущих главах. Это означает, что ваши прошлые коммиты по-прежнему имеют \ r \ n концовок, но если вы не занимаетесь тщательным отбором из прошлого, это не должно быть проблемой. Конечно, инструменты сравнения могут жаловаться немного чаще, но обычно вы будете сравнивать только те коммиты, которые находятся поблизости, так что эта проблема решается сама собой по мере накопления коммитов.

А окончание строк в UNIX стандартное, в этом вы правы. Лучший подход - настроить ваш редактор так, чтобы он писал только эти окончания даже в Windows. В противном случае есть также параметр 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
10
ответ дан 1 December 2019 в 01:05
поделиться

Чтобы продолжить решение, посмотрите параметры конфигурации core.autocrlf (и core.safecrlf) .

Выполнение этого один раз для всего вашего репозитория просто создаст одну фиксацию, с которой практически невозможно объединить (поскольку каждая строка в этих файлах будет изменена), но как только вы ее пройдете, это не должно иметь большого значения. (Да, вы можете использовать git filter-branch , чтобы вносить изменения на всем протяжении истории, но это немного пугает.)

4
ответ дан 1 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: