Когда я бегу git diff
в PHP-файле, который я изменил, он показывает, что изменялась неправильная строка, а остальные строки «не изменены» (без изменений), даже если я изменил другие строки.
Пример:
Это изменение, которое я внес в документ:
Это происходит только в определенных файлах и в других случаях, иногда добавляет другие строки, но не помечает соответствующие удаления строк. В других случаях он просто добавляет изменения в конец файла, не отмечая его как дополнение.
На SourceTree кажется, что тот же diff не имеет никакого смысла:
К вашему сведению: файлы изначально были загружены с сервера Linux.
иногда это происходит, когда ваш файл кодируется новой строкой Windows, в git он кодируется новой строкой unix, поэтому вы получаете эту ошибку, вам нужно настроить окончание строки на unix
РЕДАКТИРОВАТЬ :
эта ссылка Вот может быть полезным. Как он сказал в этом посте, вы можете попробовать, зависит от вашего редактора:
- Для пользователей Vim все готово к работе! Просто не меняй свой
настройка eol. Для пользователей Emacs добавьте (setq require-final-newline t) в
Ваш файл .emacs или .emacs.d / init.el.
- Для пользователей TextMate вы можете установить Avian Missing Bundle и добавить TM_STRIP_WHITESPACE_ON_SAVE = true в свой файл .tm_properties.
- Для возвышенных пользователей установите для параметра sure_newline_at_eof_on_save значение true.
- Для RubyMine установите «Обеспечить перевод строки в конце файла при сохранении» в «Редакторе».
Я нашел решение, осмотрев оскорбительные файлы.
Кажется, что файлы, которые давали проблемы, имели классический Macintosh CR
формат только конца строки (EOL). Сравните это с окнами CR+LF
или UNIX (и производные, включая OS X) LF
, Преобразование файла в формат Windows / UNIX EOL, фиксация исправленных файлов EOL устранила проблему.
Тестирование с помощью тестового репозитория Git подтвердило мои подозрения.
Может случиться так, что Git отслеживает изменения файлов, поддерживая только CR
в комбинации с LF
(CR+LF
) и не CR
один (как то, что использует классический Mac).