sig
  type kind = [ `Git | `Hg ]
  val pp_kind : Stdlib.Format.formatter -> Topkg.Vcs.kind -> unit
  type commit_ish = string
  type t
  val kind : Topkg.Vcs.t -> Topkg.Vcs.kind
  val dir : Topkg.Vcs.t -> Topkg.fpath
  val cmd : Topkg.Vcs.t -> Topkg.Cmd.t
  val find : ?dir:Topkg.fpath -> unit -> Topkg.Vcs.t option Topkg.result
  val get : ?dir:Topkg.fpath -> unit -> Topkg.Vcs.t Topkg.result
  val pp : Stdlib.Format.formatter -> Topkg.Vcs.t -> unit
  val is_dirty : Topkg.Vcs.t -> bool Topkg.result
  val not_dirty : Topkg.Vcs.t -> unit Topkg.result
  val file_is_dirty : Topkg.Vcs.t -> Topkg.fpath -> bool Topkg.result
  val head : ?dirty:bool -> Topkg.Vcs.t -> string Topkg.result
  val commit_id :
    ?dirty:bool ->
    ?commit_ish:Topkg.Vcs.commit_ish -> Topkg.Vcs.t -> string Topkg.result
  val commit_ptime_s :
    ?commit_ish:Topkg.Vcs.commit_ish -> Topkg.Vcs.t -> int Topkg.result
  val describe :
    ?dirty:bool ->
    ?commit_ish:Topkg.Vcs.commit_ish -> Topkg.Vcs.t -> string Topkg.result
  val tags : Topkg.Vcs.t -> string list Topkg.result
  val changes :
    ?until:Topkg.Vcs.commit_ish ->
    Topkg.Vcs.t ->
    after:Topkg.Vcs.commit_ish -> (string * string) list Topkg.result
  val tracked_files :
    ?tree_ish:string -> Topkg.Vcs.t -> Topkg.fpath list Topkg.result
  val clone : Topkg.Vcs.t -> dir:Topkg.fpath -> unit Topkg.result
  val checkout :
    ?branch:string ->
    Topkg.Vcs.t -> commit_ish:Topkg.Vcs.commit_ish -> unit Topkg.result
  val commit_files :
    ?msg:string -> Topkg.Vcs.t -> Topkg.fpath list -> unit Topkg.result
  val tag :
    ?force:bool ->
    ?sign:bool ->
    ?msg:string ->
    ?commit_ish:string -> Topkg.Vcs.t -> string -> unit Topkg.result
  val delete_tag : Topkg.Vcs.t -> string -> unit Topkg.result
end