One of my pet hates when it comes to development is a build script or an IDE that modifies project/config files so that the project looks like it’s modified in the IDE.

Modified

When I check out a project from source control, whether it be Subversion, Git, Mercurial… whatever, until I physically open and edit a (not ignored) file in that project, I only want to see that little yellow cylinder looking thing.

Unchanged

So here’s a few Don’ts to follow:

  • Don’t check in IDE generated files that might be modified by somebody else’s specific IDE settings (and re-checked-in). I’m talking Eclipse .project, .classpath, and .settings/ for example.
  • Don’t let your build scripts modify source controlled files that someone may inadvertently check in with incorrect, build generated content.

And some Dos:

  • Do use a plugin that generates IDE configuration files (.project, .classpath, .settings/ etc. in Eclipse). If you’re using Maven + Eclipse, use m2e. Gradle? Use the Gradle Eclipse/Intellij IDEA plugin.
  • Do create new files with build specific properties you need to generate content for properties files
  • Do mark all of the plugin generated files and folders as ignored in your subversion properties, .gitignore etc.

There’s a good answer over on stackoverflow which discusses this topic which is definitely worth a read.