Разрывы строк в PHP путаются в GIT - PullRequest
1 голос
/ 01 сентября 2009

Наш веб-сайт имеет один раздел, который часто изменяется в соответствии с пользователем. (примеры сильно упрощены).

user:Mike
last visit:Yesterday

Метод, используемый для обновления контента [который я сейчас не могу изменить], заключается в том, что php ищет на веб-странице html контент по умолчанию и заменяет его новым контентом перед его передачей пользователю.

$stats = "user:Mike
last visit:Yesterday";
$defaults = "user:Guest
last visit:None";
$code = implode($stats, explode($defaults, $code));

Все было хорошо, пока мы не начали резервное копирование сайта с помощью GIT [обжора для наказания, мы].

Похоже, что GIT изменяет символ новой строки на html-странице, и поэтому php больше не может найти исходный текст.

Я не понимаю, как новые строки хранятся или изменяются, но иногда я получаю сообщение об ошибке от GIT во время отправки, утверждая, что оно должно изменить новую строку, и предлагает «разблокировать» или «продолжить».

За этим следует, что сайт не работает, пока я не скопирую / вставлю текст по умолчанию из сохраненной извне копии на эту страницу - и не выполняю фиксацию.

Мне известно, что я могу использовать регулярное выражение для поиска / замены, но страница видит для меня достаточно использования, чтобы избежать ненужных выражений.

Мой локальный компьютер работает под управлением Windows. Сервер работает под Unix.

Ответы [ 4 ]

6 голосов
/ 01 сентября 2009

http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

CRLF

Этот атрибут контролирует соглашение о конце строки.

Set Установка атрибута crlf для путь предназначен для обозначения пути как "текстовый файл. core.autocrlf преобразование происходит без угадывания тип содержимого по проверке.

Unset Сброс атрибута crlf на путь говорит Git не пытаться конверсия в конце строки при регистрации или проверка.

Скажите git не преобразовывать CRLF, указав crlf как Unset для рассматриваемых файлов, и проблема должна исчезнуть.

2 голосов
/ 01 сентября 2009

Проверьте, не установлено ли для core.autocrlf значение «вход» (например, с помощью «git config --get core.autocrlf»).

Эта переменная конфигурации заставляет Git преобразовывать конечное соглашение MS Windows "\ r \ n" (CRLF) в соглашение UNIX "\ n" (LF). Для получения дополнительной информации см. Справочную страницу git-config ; атрибут crlf, о котором Dav упомянул в ответе , должен иметь более точную настройку.

1 голос
/ 01 сентября 2009

Кажется, что он конвертирует символы новой строки Windows (\r\n или 0x0D0A) в символы новой строки Unix (\n или 0x0A). Если ваш HTML содержит окончания строк Windows, поиск строки в стиле Unix, заканчивающейся в середине строки, не будет работать. Вы можете явно указать, какой из них вы хотите, как это:

$stats = "user:Mike\r\nlast visit:Yesterday";

Или:

$stats = "user:Mike\nlast visit:Yesterday";
0 голосов
/ 09 ноября 2009

Во время установки mysGit дает возможность оставить разрывы строк как есть.

Это решило проблему после обновления.

...