When syncing configuration files which would vary (e.g., due to endemic applications, security-sensitive configuration) among systems (servers, workstations, laptops, smartphones, etc.) but nevertheless contain common constructs (e.g., key bindings, basic shell aliases), it would be apt to separate such content into separate configuration files (e.g. $EMACS -eval "(emerge-files-with-ancestor nil \"$CURRENT1\" \"$CURRENT2\" \"$CURRENTARCHOPT\" \"$NEW\")" With unison-merge-files defined as follows: Merge = Name -> unison-merge-files CURRENT1 CURRENT2 NEW CURRENTARCHOPT This also uses emerge.el, which some find preferable to ediff.el: To perform an ordinary 2-way merge in a terminal, one could use the following configuration instead. Using the variable CURRENTARCH tells Unison that you expect to do 3-way merges with a common ancestor, which is only possible if the "backupcurrent" preference has been set previously to the last sync. Thus, the above works, but using double quotes throughout, as in "(ediff-merge-files. Note also that Unison replaces the CURRENT1, etc., variables with single-quoted filenames. This assumes that you are running Unison in X, because the merge command cannot be run in the terminal (Emacs: "standard input is not a tty"). When looking at the output of this command, it can be difficult to remember which changes will be kept when propagating from left to right ('>'), versus right to left ('' keeps lines which start with '>':ĭiff = diff -u CURRENT2 CURRENT1 | perl -pe 's/^\+/>/ s/^\-/ emacs -q -eval '(ediff-merge-files-with-ancestor "CURRENT1" "CURRENT2" "CURRENTARCH" nil "NEW")' The unison default diff command is diff -u CURRENT2 CURRENT1. If one runs unison within a terminal emulator capable of maintaining a suitable scrollback buffer, there is no purpose in having to confirm every non-conflicting change set the auto option to true to avoid these prompts. Tips and tricks Save human time and keystrokes The AUR contains unofficial PKGBUILDs for versions 2.32 ( unison-232-compat AUR) and 2.40 ( unison-240-compat AUR). When synchronizing between Arch and another distribution you will most likely have to manually compile OCaml and Unison on one end. Unison has a nice interface where you can view the progress and changes.įor Unison to function properly, both ends must have installed the same Unison version compiled with the same version of OCaml.
Once your profile is set up, you can start syncing:Īnd select the profile.
Note: For more information see the Sample profiles in the User Manual and Reference Guide.
You can also define which files to ignore: Root=ssh:////path/to/server/storageĭefine which directories and files should be synchronized: To configure Unison with the GUI run unison-gtk2.Īlternatively, manually create a profile in ~/.unison and add the following lines to the default configuration file, ~/.unison/ profilename.prf.ĭefine the root directory to be synchronized.ĭefine the remote directory where the files should be sychronized to. In order to use Unison, you need to create a profile.
Install the unison package, which provides CLI, GTK and GTK 2.0 interfaces.
5.4 Common configuration synchronization.