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   val append :     ?message:string ->     branch -> path:string list -> Ezirmin.Blob_log.elt -> unit Lwt.t   val read_all :     branch -> path:string list -> Ezirmin.Blob_log.elt list Lwt.t   val watch :     branch ->     path:string list ->     (Ezirmin.Blob_log.elt -> unit Lwt.t) -> (unit -> unit Lwt.t) Lwt.t end