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 value   val read :     branch -> path:string list -> Ezirmin.Lww_register.value option Lwt.t   val write :     ?message:string ->     branch -> path:string list -> Ezirmin.Lww_register.value -> unit Lwt.t   val watch :     branch ->     path:string list ->     ([ `Added of Ezirmin.Lww_register.value      | `Removed of Ezirmin.Lww_register.value      | `Updated of Ezirmin.Lww_register.value * Ezirmin.Lww_register.value ] ->      unit Lwt.t) ->     (unit -> unit Lwt.t) Lwt.t end