Thin Git CLI wrapper used for affected-file resolution and release metadata.
@spec branch_exists?(Path.t(), String.t()) :: boolean()
@spec changed_files(Path.t(), String.t(), String.t()) :: [String.t()]
@spec commit_all!(Path.t(), String.t()) :: :ok
@spec create_tag!(Path.t(), String.t()) :: :ok
@spec ensure_clean_repo!(Path.t()) :: :ok
@spec fetch_branch!(Path.t(), String.t(), String.t()) :: :ok
@spec push_branch!(Path.t(), String.t(), String.t()) :: :ok
@spec push_tag!(Path.t(), String.t(), String.t()) :: :ok
@spec remote_branch_exists?(Path.t(), String.t(), String.t()) :: boolean()
@spec remote_url(Path.t()) :: String.t() | nil
@spec revision(Path.t()) :: String.t() | nil
@spec run(Path.t(), [String.t()]) :: {:ok, String.t()} | {:error, String.t()}
@spec run!(Path.t(), [String.t()]) :: String.t()
@spec stage_all!(Path.t()) :: :ok
@spec staged_changes?(Path.t()) :: boolean()
@spec switch_orphan!(Path.t(), String.t()) :: :ok
@spec worktree_add!(Path.t(), Path.t(), String.t()) :: :ok
@spec worktree_add_detached!(Path.t(), Path.t()) :: :ok
@spec worktree_remove!(Path.t(), Path.t()) :: :ok