Интересно, почему Git говорит мне это?
$ git diff MyFile.txt
diff --git a/MyFile.txt b/MyFile.txt
index d41a4f3..15dcfa2 100644
Binary files a/MyFile.txt and b/MyFile.txt differ
Разве это не текстовые файлы?
Я проверил .gitattributes, и он пуст. Почему я получаю это сообщение? Я не могу получить diff как я использую больше
ДОБАВЛЕНО:
Я заметил, что @
в файле есть права доступа, что это? Может ли это быть причиной?
$ls -all
drwxr-xr-x 5 nacho4d staff 170 28 Jul 17:07 .
drwxr-xr-x 16 nacho4d staff 544 28 Jul 16:39 ..
-rw-r--r--@ 1 nacho4d staff 6148 28 Jul 16:15 .DS_Store
-rw-r--r--@ 1 nacho4d staff 746 28 Jul 17:07 MyFile.txt
-rw-r--r-- 1 nacho4d staff 22538 5 Apr 16:18 OtherFile.txt
ls
страницы в Mac OS X: если файл или каталог имеет расширенные атрибуты, за полем разрешений, напечатанным-l
параметром, следует@
символ . Используйте опцию,-@
чтобы увидеть эти расширенные атрибуты.vger.kernel.org
списках, вам не нужно подписываться на посты (люди будут держать вас в CC для ответов), и, скорее всего, они не учитывают достаточно большой объемgit@vger.kernel.org
списка.Ответы:
Это просто означает, что когда git проверяет фактическое содержимое файла (он не знает, что какое-либо данное расширение не является двоичным файлом - вы можете использовать файл атрибутов, если вы хотите сообщить об этом явно - см. Справочные страницы).
Осмотрев содержимое файла, он увидел вещи, которые не представлены в основных символах ascii. Будучи UTF16, я ожидаю, что в нем будут «забавные» символы, поэтому он думает, что он двоичный.
Есть способы сообщить git, если у вас есть интернационализация (i18n) или расширенные форматы символов для файла. Я недостаточно разбираюсь в точном способе установки этого - вам может понадобиться RT [Full] M ;-)
Изменить: быстрый поиск SO нашел can-i-make-git-признать-a-utf-16-файл-как-текст, который должен дать вам несколько подсказок.
источник
.gitattributes
)..gitattributes
т. Д.Если вы не указали тип файла, Git попытается определить его автоматически, и файл с очень длинными строками и, возможно, с некоторыми широкими символами (например, Unicode) будет считаться двоичным. С помощью файла .gitattributes вы можете определить, как Git интерпретирует файл. Установка атрибута diff вручную позволяет Git интерпретировать содержимое файла как текст и будет выполнять обычный diff.
Просто добавьте .gitattributes в корневую папку хранилища и установите атрибут diff для путей или файлов. Вот пример:
Если вы хотите проверить, есть ли атрибуты, установленные в файле, вы можете сделать это с помощью git check-attr
Другая хорошая ссылка об атрибутах Git может быть найдена здесь .
источник
diff
нетtext
.text
Атрибут не говорит мерзавцу к дифф с помощью текста , но вместо управления , как строки окончания обрабатываются (нормализация к LF). Смотрите вашу ссылку на .gitattributes для более подробной информации.diff=xml
вместо простоdiff
.У меня была эта проблема, когда Git GUI и SourceTree обрабатывали файлы Java / JS как двоичные файлы и, следовательно, не могли видеть разницу
Создание файла с именем «attribute» в папке .git \ info со следующим содержимым решило проблему
Если вы хотите внести это изменение для всех репозиториев, вы можете добавить файл атрибутов в следующую папку $ HOME / .config / git / attribute
источник
<project-root>/.gitattributes
файл, который делает изменение активным для всех участников и только для соответствующего проекта.* diff
было полезно для меня: оно показывает разницу во всех типах файлов. Но ваше решение лучше, потому что нужно избегать показа ненужных различий в больших двоичных файлах.Git даже определит, что это двоичный файл, если в вашем текстовом файле есть одна сверхдлинная строка. Я разбил длинную строку, превратив ее в несколько строк исходного кода, и внезапно файл превратился из «двоичного» в текстовый файл, который я мог видеть (в SmartGit).
Поэтому не продолжайте вводить слишком далеко вправо, не нажимая «Enter» в вашем редакторе - иначе позже Git будет думать, что вы создали двоичный файл.
источник
У меня была такая же проблема после редактирования одного из моих файлов в новом редакторе. Оказывается, новый редактор использовал другую кодировку (Unicode), чем мой старый редактор (UTF-8). Поэтому я просто сказал моему новому редактору сохранить мои файлы с помощью UTF-8, а затем git снова правильно показал мои изменения и не увидел их как двоичный файл.
Я думаю, проблема была в том, что git не знает, как сравнивать файлы разных типов кодирования. Таким образом, тип кодировки, который вы используете, на самом деле не имеет значения, если он остается согласованным.
Я не проверял это, но я уверен, что если бы я просто зафиксировал свой файл с новой кодировкой Unicode, то в следующий раз, когда я внесу изменения в этот файл, он бы показал изменения правильно и не обнаружил его как двоичный, так как тогда он сравнивал бы два файла в кодировке Unicode, а не файл UTF-8 с файлом Unicode.
Вы можете использовать приложение, такое как Notepad ++, чтобы легко увидеть и изменить тип кодировки текстового файла; Откройте файл в Notepad ++ и используйте меню «Кодировка» на панели инструментов.
источник
У меня была такая же проблема. Я нашел нить, когда я ищу решение в Google, но я не нахожу никакой подсказки. Но я думаю, что нашел причину после изучения, приведенный ниже пример ясно объяснит мою подсказку.
на данный момент файл new.txt рассматривается как текстовый файл.
вы получите этот результат
и попробуй это
вы получите ниже
источник
У нас был случай, когда файл .html рассматривался как двоичный файл всякий раз, когда мы пытались внести в него изменения. Очень не круто, чтобы не видеть различий. Если честно, я не проверил здесь все решения, но у нас сработало следующее:
git deletion
. Git говоритDeleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
файл теперь добавлен как обычный текстовый файлОтныне любые изменения, которые я вносил в файл, воспринимаются как обычный текстовый diff. Вы также можете раздавить эти коммиты (1, 2 и 3 - фактические изменения, которые вы делаете), но я предпочитаю видеть в будущем то, что я сделал. Сквош 1 и 2 покажет двоичное изменение.
источник
В ответ на этот полезный ответ вы можете напрямую спросить Git, почему он обрабатывает файл определенным образом:
Это дает полезный вывод, как это:
источник
file
это не команда git. Это совершенно отдельный инструмент, включенный в Git для Windows. Есть ли документация, показывающая, что это то, что git использует для обнаружения двоичных файлов?Это также вызвано (по крайней мере в Windows) текстовыми файлами с UTF-8 с кодировкой спецификации . Изменение кодировки на обычный UTF-8 немедленно заставило Git увидеть файл как type = text
источник
У меня был случай, когда
.gitignore
содержал двойной\r
(возврат каретки) последовательность по назначению.Этот файл был идентифицирован как двоичный файл git. Добавление
.gitattributes
файла помогло.источник
Если
git check-attr --all -- src/my_file.txt
указывает, что ваш файл помечен как двоичный, и вы не установили его как двоичный файл.gitattributes
, проверьте его/.git/info/attributes
.источник
Измените Aux.js на другое имя, например Sig.js.
Дерево исходных текстов по-прежнему показывает его в виде двоичного файла, но вы можете поставить (добавить) его и зафиксировать.
источник
У меня была похожая проблема, когда я вставил какой-то текст из двоичного сообщения Kafka, в котором был вставлен невидимый символ, и git решил, что файл является двоичным.
Я нашел оскорбительные символы путем поиска файла с помощью регулярных выражений
[^ -~\n\r\t]+
.[
сопоставить символы в этом наборе^
сопоставить символы не в этом наборе-~
соответствует всем символам от '' (пробел) до '~'\n
новая линия\r
возврат каретки\t
табуляция]
закрыть набор+
соответствовать одному или нескольким из этих символовисточник
Я просто потратил несколько часов, просматривая все в этом списке, пытаясь понять, почему один из тестовых проектов в моем решении не добавлял никаких тестов в проводник.
В моем случае оказалось, что каким-то образом (вероятно, из-за плохого слияния где-то), что VS потерял ссылку на проект в целом. Это все еще строило, но я заметил, что это только построило зависимости.
Затем я заметил, что он не отображается в самом списке зависимостей, поэтому я удалил и заново добавил тестовый проект, и все мои тесты наконец-то появились.
источник