code: def get_files(self, repo: str, branch: str, *,
                    depth: Optional[int]=1,
                    reference: Optional[Path]=None
                    ) -> Tuple[Repo, Path]:
          
          repo_path = self.get_path_to_repo_and_branch(repo, branch)
  
          logger.info("Repo is stored at %s", repo_path)
  
          if repo_path.exists():
              git_repo = Repo.init(repo_path)
              repo_id = self.repo_id(repo)
              if not self.single_pull or self._current_hashes[repo_id].get(branch) is None:
                  logger.info("Single pull not enabled, no pull hasn't been done yet or pull forced, pulling")
                  self._pull(git_repo=git_repo, branch=branch)
              else:
                  logger.info("Single pull enabled and already pulled in this initialization of backend")
          else:
              repo_path.parent.mkdir(exist_ok=True, parents=True)
              logger.info("Initial pull")
              git_repo = self._pull(repo_path=repo_path, repo=repo, branch=branch,
                                    depth=depth,
                                    reference=reference)
  
          self.save_hash(repo, branch, git_repo)
  
          return git_repo, repo_path
docs: Either clones the repository if it's not cloned already or pulls from origin.
          If ``single_pull`` is enabled, only pulls if the repo/branch combination wasn't pulled again by this instance.
  
          :param repo: Repo URL
          :param branch: Branch name
          :param depth:  See :meth:`run`
          :param reference: See :meth:`run`
  
          :return: A :class:`Repo <git.repo.base.Repo>` instance for the repo
                   and a :class:`Path <pathlib.Path>` to the location where the repo is stored.