diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
index 296e51b..d2e8613 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
@@ -19,10 +19,15 @@
  * under the License.
  */
 
+import java.io.File;
+
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.ScmTag;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
@@ -39,8 +44,6 @@
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 
-import java.io.File;
-
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
  *
@@ -57,10 +60,15 @@
      * TODO We currently assume a '.git' directory, so this does not work for --bare repos
      * {@inheritDoc}
      */
-    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
-                                                       ScmVersion version, boolean recursive, boolean shallow )
+    @Override
+    public ScmResult executeCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                     CommandParameters parameters )
         throws ScmException
     {
+        ScmVersion version = parameters.getScmVersion( CommandParameter.SCM_VERSION, null );
+        boolean binary = parameters.getBoolean( CommandParameter.BINARY, false );
+        boolean shallow = parameters.getBoolean( CommandParameter.SHALLOW, false );
+
         GitScmProviderRepository repository = (GitScmProviderRepository) repo;
 
         if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getFetchInfo().getProtocol() )
@@ -85,7 +93,7 @@
             }
 
             // no git repo seems to exist, let's clone the original repo
-            Commandline clClone = createCloneCommand( repository, fileSet.getBasedir(), version, shallow );
+            Commandline clClone = createCloneCommand( repository, fileSet.getBasedir(), version, binary, shallow );
 
             exitCode = GitCommandLineUtils.execute( clClone, stdout, stderr, getLogger() );
             if ( exitCode != 0 )
@@ -163,10 +171,12 @@
      * create a git-clone repository command
      */
     private Commandline createCloneCommand( GitScmProviderRepository repository, File workingDirectory,
-                                            ScmVersion version, boolean shallow )
+                                            ScmVersion version, boolean binary, boolean shallow )
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory.getParentFile(), "clone" );
 
+        forceBinary( cl, binary );
+
         if ( shallow )
         {
             cl.createArg().setValue( "--depth" );
@@ -189,6 +199,15 @@
         return cl;
     }
 
+    private void forceBinary( Commandline cl, boolean binary )
+    {
+        if ( binary )
+        {
+            cl.createArg().setValue( "-c" );
+            cl.createArg().setValue( "core.autocrlf=false" );
+        }
+    }
+
     /**
      * create a git-pull repository command
      */
@@ -228,4 +247,17 @@
         }
         return cl;
     }
+
+    /**
+     * The overriden {@link #executeCommand(ScmProviderRepository, ScmFileSet, CommandParameters)} in this class will
+     * not call this method!
+     * <p>
+     * {@inheritDoc}
+     */
+    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                        ScmVersion version, boolean recursive, boolean shallow )
+         throws ScmException
+     {
+         throw new UnsupportedOperationException( "Should not get here" );
+     }
 }
