Patch Set 2:

I do not understand why you introduce the Git* implementations of IResource et al.

What exactly is the benefit of this?

I would think that the subclasses of IResourceVariant like GitResourceVariant or GitFolderResourceVariant are used for the purpose to provide the remote content:

JavaDoc of IResourceVariant
 * This interface is used by <code>SyncInfo</code> instances
 * to provide access to the base and remote resources that correspond to 
 * a local resource.