Git thinks files are binary
Poor solution
I was having this issue where Git GUI and SourceTree was treating Java/JS files as binary and thus wouldn’t show a diff.
Creating a file named attributes
in .git/info
with following content solved the problem:
*.java diff
*.js diff
*.pl diff
*.txt diff
*.ts diff
*.html diff
*.sh diff
*.xml diff
If you would like this to apply to all repositories, then you can add the file attributes
in $HOME/.config/git/attributes
.
Root issue
I had this same problem after editing one of my files in a new editor. Turns out the new editor used a different encoding (Unicode) than my old editor (UTF-8). So I simply told my new editor to save my files with UTF-8 and then git showed my changes properly again and didn't see it as a binary file.
I think the problem was simply that git doesn't know how to compare files of different encoding types. So the encoding type that you use really doesn't matter, as long as it remains consistent.
I didn't test it, but I'm sure if I would have just committed my file with the new Unicode encoding, the next time I made changes to that file it would have shown the changes properly and not detected it as binary, since then it would have been comparing two Unicode encoded files, and not a UTF-8 file to a Unicode file.
You can use an app like Notepad++ to easily see and change the encoding type of a text file; Open the file in Notepad++ and use the Encoding menu in the toolbar.
Fix
Vim
:set filencoding
to view current file encoding
:set filencoding=utf-8
to fix it back to a good encoding
Other Editors
Change it to UTF-8