Intellij IDEA and Git on Windows

Git on Windows can be tricky and the integration with Intellij IDEA sometimes requires some fine tuning. Some notes follow for future references.

TLDR: My favourite GIT setup on Windows: git config core.autocrlf true, git config core.filemode false, explicitly configure line endings for some file types in .gitattributes

Basic setup

There are different ways of getting a command line client on Windows, via the:

After some testing, I decided to settle with the second option. I use ZSH as my default shell on Windows, so this option felt the more natural to me. Moreover I had had some headaches using the client from the official package (option 1).

The next step is to setup the Intellij IDEA integration in Version Control > Git in File -> Settings

Git executable configuration

Git integration is available if the Git plugin is installed and enabled.

Git plugin

Setup quirks

My definitive setup required some additional minor tweaks to make everything work smoothly (you may not experience the same inconsistencies if you do not mix many different clients as I did).

Fix the changelist

It happened that files were listed as changed in Intellij IDEA, but the diff dialog displayed no difference aganist the current repository version.

IDEA diff dialog shows no difference, but file is listed as changed

In fact, exploring differences from the command line (git diff), gave a bunch of:

old mode 100755
new mode 100644

Aha! This is related to the unix execution bit mismatch (set by the command line client on Windows but not on the repository). The following setup:

git config core.filemode false

solves the problem.

Mind the EOL?

If your team have users on different operating systems, committing line endings information in the repository can be problematic. Differences in EOL (eg. CRLF on Windows and LF on Unix) can bring you back in the days when merging was always a nightmare.

The topic is both interesting and quite controversial. However git is able to trasparently handle the conversion within the repository leaving your working directory unchanged, but this is not the default option. You must set the following:

git config core.autocrlf true

If you do not set the above option you get a warning whenever Intellij IDEA understands that a commit may introduce EOL problems in the repository. This can be annoying if EOL conversion strategy does not make sense (eg. Windows users only): you can disable the warning in the IDE settings.

Option about EOL commit warning

If some files must retain a defined EOL, you may always instruct git via the .gitattributes file, e.g.:

# We dont want CRLF for bash shell scripts
*.sh text eol=lf
bin/main text eol=lf