Gitpython

More to come…

Example:

@contextmanager
def temporary_git_repo(url, branchname):
    """
    Context manager that clones the repo with that url
    to a temporary directory somewhere,
    checks out the branch, and returns a git.Repo object.
    Once the context is exited, it's all cleaned up.
    """
    with tempfile.TemporaryDirectory() as temp_dir_path:
        # Will be cleaned up when the context exits
        # Clone to it
        subprocess.run(["/usr/bin/env"])
        command = [
                "git",
                "clone",
                "--single-branch",
                "--branch",
                branchname,
                "--depth",
                "2",
                url,
                temp_dir_path,
            ]
        print(" ".join(command))
        subprocess.run(
            command,
            check=True,
        )
        with git.Repo(temp_dir_path) as repo:
            yield repo