как избежать git-apply, меняя окончания строк - PullRequest
8 голосов
/ 10 июня 2011

У меня есть git-репо с core.eol=crlf, core.autocrlf=true и core.safecrlf=true.

Когда я применяю патч из другого репозитория crlf и к моему репо, все окончания строк для указанного файла меняются на lf. В настоящее время я применяю патч так:

git apply --ignore-whitespace mychanges.patch

(Кажется, я должен использовать --ignore-whitespace, чтобы успешно применить патч.)

Моя текущая работа - запустить unix2dos в файле. Есть ли лучший способ подать заявку, чтобы соответствовать моим настройкам eol?

Ответы [ 3 ]

2 голосов
/ 05 сентября 2017

Проверьте, сохраняется ли проблема с Git 2.14.x / 2.15 (3 квартал 2015 года)

См. commit c24f3ab (19 августа 2017) и commit 2fea9de (13 августа 2017 г.) Торстен Бёгерсхаузен (tboegi) .
(объединено Junio ​​C Hamano - gitster - в коммит a17483f, 27 августа 2017 г.)

apply: файл, зафиксированный с помощью CRLF, должен использовать diff и применять

Когда файл был зафиксирован с помощью CRLF, но теперь .gitattributes говорит "* text=auto" (или core.autocrlf - true), следующее не происходит в обратном направлении, git apply не удается:

printf "Added line\r\n" >>file &&
git diff >patch &&
git checkout -- . &&
git apply patch

Перед применением патча,файл из рабочего дерева преобразуется в индексный формат (чистый фильтр, преобразование CRLF, ...).
Здесь при фиксации с помощью CRLF окончания строк не должны преобразовываться.

2 голосов
/ 10 июня 2011

Я бы не позволил моей системе контроля источника контролировать мои окончания строк. Auto crlf имеет значение false, и показ различий без раздражающего ^ M выполняется путем установки для core.whitespace значения cr-at-eol. Теперь вывод diff будет приятнее для чтения.

0 голосов
/ 25 июня 2012

Попробуйте в чистом рабочем каталоге:

git apply mychanges.patch
git diff -w > mychangesnows.patch
git reset --hard
git apply mychangesnows.patch
...