| Index: gclient_scm.py
 | 
| diff --git a/gclient_scm.py b/gclient_scm.py
 | 
| index a87032e749902122c676b6621dde4fec33f8f232..d457a5c5a5fc8b7f6450656d0a5ce45fcc1192ed 100644
 | 
| --- a/gclient_scm.py
 | 
| +++ b/gclient_scm.py
 | 
| @@ -825,6 +825,25 @@ class GitWrapper(SCMWrapper):
 | 
|      # create it, so we need to do it manually.
 | 
|      parent_dir = os.path.dirname(self.checkout_path)
 | 
|      gclient_utils.safe_makedirs(parent_dir)
 | 
| +
 | 
| +    template_dir = None
 | 
| +    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)
 | 
| +      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)
 | 
| @@ -841,6 +860,8 @@ class GitWrapper(SCMWrapper):
 | 
|        if os.listdir(tmp_dir):
 | 
|          self.Print('_____ removing non-empty tmp dir %s' % tmp_dir)
 | 
|        gclient_utils.rmtree(tmp_dir)
 | 
| +      if template_dir:
 | 
| +        gclient_utils.rmtree(template_dir)
 | 
|      self._UpdateBranchHeads(options, fetch=True)
 | 
|      self._Checkout(options, revision.replace('refs/heads/', ''), quiet=True)
 | 
|      if self._GetCurrentBranch() is None:
 | 
| 
 |