There is so much fanboyism around Intellij being this mega-super-awesome IDE that totally leaves Eclipse in the dust. So a while ago I decided to try using Intellij as my main IDE for DripStat. As it turns out, there are tons of chinks in the armor. Take for example version controlling Intellij’s project files:
Now Eclipse has literally just 2 config files you need to checkin -
.classpath. They don’t modify themselves so often and the fact that there is only 2 of them makes them easy to manage if they do.
Intellij on the other hand:
Yes, 52 files for Intellij!
And that is in a very small project. Thats 52 different files you have to keep track of and will randomly add/remove change as you modify your project and its dependencies.
For some reason, Intellij has to generate a new file for every single library you use, even though there is a standard directory and naming conventions to store those libraries if I am using Gradle. And it wants to check them in.
Whats worse is how incompatible Intellij’s project files are. If one dev opens a project in Intellij 12 and other in Intellij 13, both will now have a broken project and an enormous amount of files they need to manage. And unless everyone upgrades there is no real way to figure out which version’s file to checkin. Also what is crazy is how randomly the files change. Just removing/adding the same library changes a whole bunch of files that I have no idea about.
Note that this goes not just for Intellij. Even with Webstorm 7, I have to constantly fight the IDE’s files against my own source code.
Managing Intellij’s project files is an absolute pain in the ass. Its more work than managing your source code and its useless work that one shouldn’t have to do. Eclipse does a far better job by keeping you from checking in those files to your version control.
At this point I have just stopped checking in Intellij specific files and moved them to a separate changelist (the one you see above). Jetbrains needs to clarify its guidelines on whether it wants developers to checkin IDE specific stuff. And if yes, then needs to provide a better way to manage them.