# Unison

Unison is a file synchronizer for Unix and Windows. It allows two replicas of a
collection of files and directories to be stored on different hosts (or
different disks on the same host), modified separately, and then brought up to
date by propagating the changes in each replica to the other.

Homepage: https://github.com/bcpierce00/unison/

Please address questions and bug reports to the Cygwin mailing list
<cygwin@cygwin.com>.

## Unison versions and packages

Unison versions 2.52 and later are provided in Cygwin by the unison package. The
executable is /usr/bin/unison-latest. All versions 2.52 and later are compatible
with each other, so they can sync with each other. They can also sync with
Unison versions 2.48-2.51, but apparently not with versions older than
that. Test reports are welcome on the Cygwin list, cygwin@cygwin.com.

Prior to version 2.52, Unison came in multiple complementary packages for
Cygwin:

Package name       Unison version  OCaml version  Unison executable
------------       --------------  -------------  -----------------
unison2.27         2.27.*          4.01.0         /usr/bin/unison-2.27
unison2.32         2.32.*          4.01.0         /usr/bin/unison-2.32
unison2.40         2.40.*          4.02.3         /usr/bin/unison-2.40
unison2.45         2.45.*          4.01.1         /usr/bin/unison-2.45
unison2.48+4.04.2  2.48.*          4.04.2         /usr/bin/unison-2.48+4.04.2
unison2.48+4.08.1  2.48.*          4.08.1         /usr/bin/unison-2.48+4.08.1
unison2.49         2.49.*          4.02.3         /usr/bin/unison-2.49
unison2.51+4.04.2  2.51.*          4.04.2         /usr/bin/unison-2.51+4.04.2
unison2.51+4.10.0  2.51.*          4.10.0         /usr/bin/unison-2.51+4.10.0

Different packages were needed because Unison executables could only sync with
each other if they had the same Unison version, and were compiled with
compatible versions of OCaml. (It was kind of a nightmare.) So you had to have a
version installed locally that matched the version you were synchronizing with.

## Migrating to version 2.52 or later

To upgrade Unison on your local host to version 2.52 or later:

* If the remote host is also running Unison 2.52 or later, you're all set.

* If the remote host is running Unison 2.48-2.51, you can sync with it. If
  you've previously synchronized files with that host, try syncing with it again
  with your local version 2.52 or later. If the two Unisons were built with
  compatible versions of OCaml, then the newer Unison will upgrade the local
  Unison archive files to the newer format. After that you can sync using any
  later version of Unison, regardless of the OCaml version. But if Unison throws
  an error about bad archives or the like, then you'll have to either go back to
  using the previous Unison version, or (recommended) remove the previous
  archive files (~/.unison/ar* and ~/.unison/fp*) and start over with a fresh
  synchronization.

* If the remote host is running a version older than 2.48, you can't sync to it
  with version 2.52 or later. You'll have to keep using one of the older Unison
  packages listed above, that matches the Unison and OCaml versions of the
  remote host.

The [Unison 2.52 Migration
Guide](https://github.com/bcpierce00/unison/wiki/2.52-Migration-Guide) has more
detailed information.

## Setting a default version

The package postinstallation scripts use alternatives(8) to install a symlink
/usr/bin/unison that points to one of the above-named executables. By default
this symlink will track the highest-numbered version of Unison that you install
on your system. You can change that using alternatives:

  alternatives --config unison

(recommended) or manually. See "man alternatives" for details.

If the remove host provides multiple versions of Unison, then you can invoke
Unison locally with for example '-servercmd /usr/bin/unison-2.51' to run the
version you want on the remote end, or put 'servercmd /usr/bin/unison-2.51' into
the local preference file.

## User interface

All of the Unison packages for Cygwin use the text UI. There is also a GTK3 UI
for Unison, but I haven't tried to build it for Cygwin yet.
