diff --git a/gclient_scm.py b/gclient_scm.py
index f58c07a8..c8409726 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -1137,31 +1137,29 @@ class GitWrapper(SCMWrapper):
       clone_cmd.append(url)
 
       template_dir = None
+      use_fetch = False
+
+      tmp_dir = tempfile.mkdtemp(
+          prefix='_gclient_%s_' % os.path.basename(self.checkout_path),
+          dir=parent_dir)
+
       if hasattr(options, 'no_history') and options.no_history:
         if gclient_utils.IsGitSha(revision):
-          # In the case of a subproject, the pinned sha is not necessarily the
-          # head of the remote branch (so we can't just use --depth=N). Instead,
-          # we tell git to fetch all the remote objects from SHA..HEAD by means
-          # of a template git dir which has a 'shallow' file pointing to the
-          # sha.
-          template_dir = tempfile.mkdtemp(prefix='_gclient_gittmp_%s' %
-                                          os.path.basename(self.checkout_path),
-                                          dir=parent_dir)
-          self._Run(['init', '--bare', template_dir],
-                    options,
-                    cwd=self._root_dir)
-          with open(os.path.join(template_dir, 'shallow'),
-                    'w') as template_file:
-            template_file.write(revision)
-            clone_cmd.append('--template=' + template_dir)
+          self._Run(['init', tmp_dir], options, cwd=self._root_dir)
+
+          self._Run(['-C', tmp_dir, 'remote', 'add', 'origin', url], options, cwd=self._root_dir)
+
+          clone_cmd = cfg + ['-C', tmp_dir, 'fetch', '--progress']
+          clone_cmd.append('--depth=1')
+          clone_cmd.append(url)
+          clone_cmd.append(revision)
+          use_fetch = True
         else:
           # Otherwise, we're just interested in the HEAD. Just use --depth.
           clone_cmd.append('--depth=1')
 
-      tmp_dir = tempfile.mkdtemp(prefix='_gclient_%s_' %
-                                 os.path.basename(self.checkout_path),
-                                 dir=parent_dir)
-      clone_cmd.append(tmp_dir)
+      if use_fetch == False:
+        clone_cmd.append(tmp_dir)
 
       try:
         self._Run(clone_cmd,
@@ -1452,6 +1450,9 @@ class GitWrapper(SCMWrapper):
     if refspec:
       fetch_cmd.append(refspec)
 
+    if hasattr(options, 'no_history') and options.no_history:
+      fetch_cmd.append('--depth=1')
+
     if prune:
       fetch_cmd.append('--prune')
     if options.verbose:
