Git думает, что я переписываю один из моих файлов каждый раз, когда я делаю небольшое изменение

StackOverflow https://stackoverflow.com/questions/244639

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть файл Java среднего размера. Каждый раз, когда я вносил изменения в один из моих файлов, BuildTable.java, Git сообщает об этом как о существенном изменении, даже если это всего лишь строка или две. BuildTable.java содержит около 200 строк, и изменение этого коммита изменило только одну строку.

git-diff выводит это:

--- a/src/BuildTable.java
+++ b/src/BuildTable.java
@@ -1 +1 @@
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file

После выполнения git-commit -a

Created commit fe43985: better error notifications
 3 files changed, 54 insertions(+), 50 deletions(-)
 rewrite src/BuildTable.java (78%)

Git видит этот файл как бинарный или что-то в этом роде? Это проблема? Если это так, как я могу это исправить?

Это было полезно?

Решение 2

Чтобы исправить это, мне не нужно было менять какие-либо основные настройки git, так как генерируемые окончания строк по умолчанию были хороши, просто этот конкретный файл был искажен. Чтобы исправить это, я открыл vim и выполнил следующую команду

:%s/^M/\r/g

Обратите внимание, что для ввода " ^ M " вам нужно набрать ctrl-V, а затем ctrl-M.

Другие советы

Очевидно, что git не нравятся окончания строк в стиле Mac (только CR). Его алгоритм сравнения использует LF в качестве разделителя строк.

Исправьте в файлах окончания строк в стиле Windows (CR LF) или unix (только LF).

Установите core.autocrlf и core.safecrlf с помощью git-config . Это заставит git автоматически преобразовывать окончания строк при переносе из / в хранилище объектов. Вам может потребоваться сделать коммит для сохранения " нового " окончания.

Судя по вставленному примеру, вы также можете страдать от "окончаний строк Mac в старом стиле". (спасибо ddaa и Charles Bailey для подсказки), которые являются только голыми CR без каких-либо LF , случай, не обработанный git. Если это так (проверьте с помощью шестнадцатеричного редактора), используйте такой инструмент, как перекодировать чтобы перевести этот мусор в какой-то формат 21-го века, например, в правильные LF -только строки Unix.

git diff -b

Игнорирует изменения конца строки при отображении различий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top