sig   type repo   type branch   val init : ?root:string -> ?bare:bool -> unit -> repo Lwt.t   val master : repo -> branch Lwt.t   val get_branch : repo -> branch_name:string -> branch Lwt.t   val get_branch_name : branch -> string option Lwt.t   val clone_force : branch -> string -> branch Lwt.t   val merge : branch -> into:branch -> unit Lwt.t   val predecessors : repo -> branch -> branch list Lwt.t   val update_branch : branch -> set:branch -> unit Lwt.t   module Commit :     sig       type t       val commit_of_branch : branch -> t option Lwt.t       val branch_of_commit : repo -> t -> branch Lwt.t       val predecessors : t -> t list       val compare_and_update_branch :         branch -> expect:t option -> update:t option -> bool Lwt.t     end   val install_listener : unit -> unit   module Sync :     sig       type remote       val remote_uri : string -> remote       val pull :         remote ->         branch ->         [ `Merge | `Update ] ->         [ `Conflict of string | `Error | `No_head | `Ok ] Lwt.t       val push : remote -> branch -> [ `Error | `Ok ] Lwt.t     end   module Store : Irmin.S   type elt   type cursor   val append :     ?message:string ->     branch -> path:string list -> Ezirmin.Log.elt -> unit Lwt.t   val get_cursor :     branch -> path:string list -> Ezirmin.Log.cursor option Lwt.t   val read :     Ezirmin.Log.cursor ->     num_items:int -> (Ezirmin.Log.elt list * Ezirmin.Log.cursor option) Lwt.t   val read_all : branch -> path:string list -> Ezirmin.Log.elt list Lwt.t   val at_time : Ezirmin.Log.cursor -> Ptime.t option   val is_earlier :     Ezirmin.Log.cursor -> than:Ezirmin.Log.cursor -> bool option   val is_later : Ezirmin.Log.cursor -> than:Ezirmin.Log.cursor -> bool option   val watch :     branch ->     path:string list ->     (Ezirmin.Log.elt -> unit Lwt.t) -> (unit -> unit Lwt.t) Lwt.t end