def __init__(
            self,
            path_to_changed_dir: str,
            git_ref: str,
            git_path: str,
            subdir: str = None,
            buf_path: str = None,
            config_file_loc: str = None,
            additional_args: List[str] = None) -> None:
        """Initialize the configuration of buf

        This function sets up any necessary config without actually
        running buf against any proto files.

        BufWrapper takes a path to a directory containing proto files
        as input, and it checks if these proto files break any changes
        from a given initial state.

        The initial state is input as a git ref. The constructor expects
        a git ref string, as well as an absolute path to a .git folder
        for the repository.

        Args:
            path_to_changed_dir {str} -- absolute path to a directory containing proto files in the after state
            buf_path {str} -- path to the buf binary (default: "buf")
            git_ref {str} -- git reference to use for the initial state of the protos (typically a commit hash)
            git_path {str} -- absolute path to .git folder for the repository of interest

            subdir {str} -- subdirectory within git repository from which to search for .proto files (default: None, e.g. stay in root)
            additional_args {List[str]} -- additional arguments passed into the buf binary invocations
            config_file_loc {str} -- absolute path to buf.yaml configuration file (if not provided, uses default buf configuration)
        """
        if not Path(path_to_changed_dir).is_dir():
            raise ValueError(f"path_to_changed_dir {path_to_changed_dir} is not a valid directory")

        if Path.cwd() not in Path(path_to_changed_dir).parents:
            raise ValueError(
                f"path_to_changed_dir {path_to_changed_dir} must be a subdirectory of the cwd ({ Path.cwd() })"
            )

        if not Path(git_path).exists():
            raise ChangeDetectorError(f'path to .git folder {git_path} does not exist')

        self._path_to_changed_dir = path_to_changed_dir
        self._additional_args = additional_args
        self._buf_path = buf_path or "buf"
        self._config_file_loc = config_file_loc
        self._git_ref = git_ref
        self._git_path = git_path
        self._subdir = subdir
        self._final_result = None

        pull_buf_deps(
            self._buf_path,
            self._path_to_changed_dir,
            config_file_loc=self._config_file_loc,
            additional_args=self._additional_args)