I knew I would get into trouble here. This string handling is sub-optimal. To fix it I need your help.
We had a nice implementation which you suggested in http://egit.eclipse.org/r/#patch,sidebyside,825,4,org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
See my latest comment here.
Basically I couldn't find out ALL places where we detect a D/F conflict and all places where we leave a conflicting path. combineDF() is not called for all D/F conflicts (sometimes fastMin() finds something and we don't enter combineDF(). When  I added marking a D/F conflict in two more places in fastMin() I saw that we got too many conflicts. I can only guess that popEntriesEqual() is not the only place where we have to clean the state.