code: def clone(cls, repo_location, repo_dir=None,
                branch_or_tag=None, temp=False):
          
          if temp:
              reponame = repo_location.rsplit('/', 1)[-1]
              suffix = '%s.temp_simpl_GitRepo' % '_'.join(
                  [str(x) for x in (reponame, branch_or_tag) if x])
              repo_dir = create_tempdir(suffix=suffix, delete=True)
          else:
              repo_dir = repo_dir or os.getcwd()
          git_clone(repo_dir, repo_location, branch_or_tag=branch_or_tag)
          # assuming no errors
          return cls(repo_dir)
docs: Clone repo at repo_location into repo_dir and checkout branch_or_tag.
  
          Defaults into current working directory if repo_dir is not supplied.
  
          If 'temp' is True, a temporary directory will be created for you
          and the repository will be cloned into it. The tempdir is scheduled
          for deletion (when the process exits) through an exit function
          registered with the atexit module. If 'temp' is True, repo_dir
          is ignored.
  
          If branch_or_tag is not specified, the HEAD of the primary
          branch of the cloned repo is checked out.