Use case
You have to run your program on a remote server. However your favourite editor with your favourite configuration isn’t available over SSH. Or its over-SSH mode is very slow (looking at you, TRAMP). Also, you’d like to work online sometimes.
Unison is like Dropbox but without an intermediary server.
Setting it up
First, you need to have two1 directories, one in your local machine and one in
your remote machine, that will be synchronised. For example,
/local/path/to/my/software
in your local machine and /remote/path/software
in your remote server. You must have SSH access to the server, which is for
example at user@host
.
Then you download and
install Unison.
Preferrably use your system’s package. You need two executables: unison
and
unison-fsmonitor
. The second one is not always available with the unison
package: it is not there, for example on Ubuntu or OS X. To install it:
- Ubuntu: install the
ocaml
package to compile Unison from source. Then just runmake
. It might give an error, but with a little bit of luck you will have compiled theunison-fsmonitor
executable before that. Copy it to your$PATH
. - OS X: install UNOX
Now you have to set up a “profile” configuration file in your local machine. In
$HOME/.unison/profile-name.prf
, write something like:
root = /local/path/to/my/software
root = ssh://user@host//remote/path/software
ignore = Regex ^(.*/)*[^/]*\.[^/]*$
ignorenot = Regex ^(.*/)*[^/]*\.(py|txt|md|ipynb|bash|gitignore)$
This will synchronize all files ending in .py
, .txt
, .md
… or having no
“.” in their filename, between the two directories mentioned at the beginning.
Read more about how the ignore
and ignorenot
rules
work
here and
here.
Finally, in your local machine, run:
unison profile-name -repeat watch -times -logfile /var/log/unison.log
And the directories shall be synchronized.
- Or more, but we will only set up two here. ^