Почему Git рассматривает этот текстовый файл как двоичный файл?

Интересно, почему 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, и он пуст. Почему я получаю это сообщение? Я не могу получить различий, как я использую больше

ДОБАВЛЕНО:

Я заметил, что в разрешениях файла есть @, что это? Может ли это быть причиной?

$ls -all
drwxr-xr-x   5 nacho4d  staff    170 28 Jul 17:07 .
drwxr-xr-x  16 nacho4d  staff    544 28 Jul 16:39 ..
[email protected]  1 nacho4d  staff   6148 28 Jul 16:15 .DS_Store
[email protected]  1 nacho4d  staff    746 28 Jul 17:07 MyFile.txt
-rw-r--r--   1 nacho4d  staff  22538  5 Apr 16:18 OtherFile.txt
113 голосов | спросил nacho4d 28 J000000Thursday11 2011, 11:55:47

11 ответов


0

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

Изучив содержимое файла, он увидел вещи, которые не представлены в основных символах ascii. Будучи UTF16, я ожидаю, что в нем будут «забавные» символы, поэтому он думает, что он двоичный.

Есть способы сообщить git, если у вас есть интернационализация (i18n) или расширенные символьные форматы для файла. Я недостаточно разбираюсь в точном способе установки этого - вам может понадобиться RT [Full] M ;-)

Изменить: быстрый поиск SO найден can-i-make-git -озна-a-utf-16-файл-как-текст , который должен дать вам несколько подсказок.

ответил Philip Oakley 28 J000000Thursday11 2011, 13:10:43
0

Если вы не указали тип файла, Git попытается определить его автоматически и файл с очень длинными строками и, возможно, с некоторыми широкие символы (например, Unicode) считаются двоичными. С помощью .gitattributes вы можете определить, как Git интерпретирует файл. Установка атрибута diff вручную позволяет Git интерпретировать содержимое файла как текст и будет выполнять обычный diff.

Просто добавьте .gitattributes в корневую папку своего хранилища и установите атрибут diff для путей или файлов. Вот пример:

src/Acme/DemoBundle/Resources/public/js/i18n/* diff
doc/Help/NothingToSay.yml                      diff
*.css                                          diff

Если вы хотите проверить, есть ли атрибуты, установленные в файле, вы можете сделать это с помощью git check-attr

git check-attr --all -- src/my_file.txt

Еще одну полезную ссылку на атрибуты Git можно найти здесь .

ответил naitsirch 24 J0000006Europe/Moscow 2014, 12:22:25
0

Git даже определит, что это двоичный файл, если в вашем текстовом файле есть одна очень длинная строка. Я разбил длинную строку, превратив ее в несколько строк исходного кода, и внезапно файл превратился из «двоичного» в текстовый файл, который я мог видеть (в SmartGit).

Так что не продолжайте вводить слишком далеко вправо, не нажимая «Enter» в вашем редакторе - иначе позже Git будет думать, что вы создали двоичный файл.

ответил Chris Murphy 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 05 Sep 2013 01:32:58 +0400 2013, 01:32:58
0

У меня была проблема, когда Git GUI и SourceTree обрабатывали файлы Java /JS как двоичные файлы и, следовательно, не могли видеть разницу

Создание файла с именем «attribute» в папке .git \ info со следующим содержанием решило проблему

*.java diff
*.js diff
*.pl diff
*.txt diff
*.ts diff
*.html diff

Если вы хотите внести это изменение для всех репозиториев, вы можете добавить файл атрибутов в следующую папку $ HOME /.config /мерзавец /атрибуты

ответил Hemant 28 +03002015-10-28T21:47:13+03:00312015bEurope/MoscowWed, 28 Oct 2015 21:47:13 +0300 2015, 21:47:13
0

У меня была такая же проблема после редактирования одного из моих файлов в новом редакторе. Оказывается, новый редактор использовал другую кодировку (Unicode), чем мой старый редактор (UTF-8). Поэтому я просто сказал моему новому редактору сохранить мои файлы в UTF-8, а затем git снова правильно показал мои изменения и не увидел их как двоичный файл.

Я думаю, проблема была в том, что git не знает, как сравнивать файлы разных типов кодирования. Таким образом, тип кодировки, который вы используете, действительно не имеет значения, если он остается согласованным.

Я не проверял его, но я уверен, что если бы я просто зафиксировал свой файл с новой кодировкой Unicode, в следующий раз, когда я внесу изменения в этот файл, он бы показал изменения правильно и не обнаружил их как двоичный, с тех пор он сравнивал бы два файла в кодировке Unicode, а не файл UTF-8 с файлом Unicode.

Вы можете использовать приложение, например Notepad ++ , чтобы легко видеть и изменять тип кодировки текстового файла; Откройте файл в Notepad ++ и используйте меню «Кодировка» на панели инструментов.

ответил deadlydog 16 Jpm1000000pmThu, 16 Jan 2014 22:32:46 +040014 2014, 22:32:46
0

У меня была такая же проблема. Я нашел нить, когда я ищу решение в Google, но я не нахожу никакой подсказки. Но я думаю, что нашел причину после изучения, приведенный ниже пример четко объяснит мою подсказку.

    echo "new text" > new.txt
    git add new.txt
    git commit -m "dummy"

на данный момент файл new.txt рассматривается как текстовый файл.

    echo -e "newer text\000" > new.txt
    git diff

вы получите этот результат

diff --git a/new.txt b/new.txt
index fa49b07..410428c 100644
Binary files a/new.txt and b/new.txt differ

и попробуйте это

git diff -a

вы получите ниже

    diff --git a/new.txt b/new.txt
    index fa49b07..9664e3f 100644
    --- a/new.txt
    +++ b/new.txt
    @@ -1 +1 @@
    -new file
    +newer text^@
ответил howard 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 24 Sep 2015 06:11:51 +0300 2015, 06:11:51
0

У нас был случай, когда файл .html рассматривался как двоичный файл всякий раз, когда мы пытались внести в него изменения. Очень не круто, чтобы не видеть различий. Если честно, я не проверил здесь все решения, но у нас получилось следующее:

  1. удалил файл (фактически переместил его на рабочий стол) и подтвердил git deletion. Git говорит Deleted file with mode 100644 (Regular) Binary file differs
  2. Повторно добавил файл (фактически перемещен это с моего рабочего стола обратно в проект). Git говорит: New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions Файл теперь добавляется как обычный текстовый файл

Отныне любые изменения, которые я вносил в файл, воспринимаются как обычный текстовый diff. Вы также можете раздавить эти коммиты (1, 2 и 3 - фактические изменения, которые вы делаете), но я предпочитаю видеть в будущем то, что я сделал. Сквош 1 & 2 покажет двоичное изменение.

ответил StuFF mc 20 TueEurope/Moscow2016-12-20T14:07:54+03:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2016 14:07:54 +0300 2016, 14:07:54
0

За этот полезный ответ вы можете напрямую спросить Git, почему он так или иначе относится к файлу:

cd directory/of/interest
file *

Он производит полезный вывод, как это:

$ file *
CR6Series_stats resaved.dat: ASCII text, with very long lines, with CRLF line terminators
CR6Series_stats utf8.dat:    UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators
CR6Series_stats.dat:         ASCII text, with very long lines, with CRLF line terminators
readme.md:                   ASCII text, with CRLF line terminators
ответил patricktokeeffe 22 FriEurope/Moscow2017-12-22T04:32:37+03:00Europe/Moscow12bEurope/MoscowFri, 22 Dec 2017 04:32:37 +0300 2017, 04:32:37
0

У меня был экземпляр, в котором .gitignore содержал двойной код \r (возврат каретки) по назначению.

Этот файл был идентифицирован как двоичный файл git. Помогло добавление файла .gitattributes.

# .gitattributes file
.gitignore diff
ответил Erik Zivkovic 7 J0000006Europe/Moscow 2018, 14:13:49
0

Если git check-attr --all -- src/my_file.txt указывает, что ваш файл помечен как двоичный, и вы не установили его как двоичный в .gitattributes, проверьте это в /.git/info/attributes.

ответил coberlin 13 22018vEurope/Moscow11bEurope/MoscowTue, 13 Nov 2018 21:52:28 +0300 2018, 21:52:28
0

Я просто потратил несколько часов, просматривая все в этом списке, пытаясь понять, почему один из тестовых проектов в моем решении не добавляет какие-либо тесты в проводник.

В моем случае выяснилось, что каким-то образом (вероятно, из-за плохого слияния где-то в Git) VS потерял ссылку на проект в целом. Это все еще строило, но я заметил, что это только строило зависимости.

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

ответил cirrus 4 ThuEurope/Moscow2014-12-04T17:51:01+03:00Europe/Moscow12bEurope/MoscowThu, 04 Dec 2014 17:51:01 +0300 2014, 17:51:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132