strings.ml (190877B)
1 (* DO NOT MODIFY. 2 This file has been automatically generated, see docs.ml. *) 3 4 let docs = 5 ("about", ("About Unison", 6 "Unison File Synchronizer\n\ 7 Version 2.53.7\n\ 8 \n\ 9 ")) 10 :: 11 ("", ("Overview", 12 "Overview\n\ 13 \n\ 14 \032 Unison is a file-synchronization tool for POSIX-compliant systems (e.g.\n\ 15 \032 BSDs, GNU/Linux, macOS) and Windows. It allows two replicas of a\n\ 16 \032 collection of files and directories to be stored on different hosts (or\n\ 17 \032 different disks on the same host), modified separately, and then\n\ 18 \032 brought up to date by propagating the changes in each replica to the\n\ 19 \032 other.\n\ 20 \n\ 21 \032 Features:\n\ 22 \032 * Unison works across platforms, allowing you to synchronize a\n\ 23 \032 Windows laptop with a Unix server, for example.\n\ 24 \032 * Unlike a distributed filesystem, Unison is a user-level program:\n\ 25 \032 there is no need to modify the kernel or to have superuser\n\ 26 \032 privileges on either host.\n\ 27 \032 * Unlike simple mirroring or backup utilities, Unison can deal with\n\ 28 \032 updates to both replicas of a distributed directory structure.\n\ 29 \032 Updates that do not conflict can be propagated automatically.\n\ 30 \032 Conflicting updates are detected and displayed.\n\ 31 \032 * Unison works between any pair of machines connected to the\n\ 32 \032 internet, communicating over either a direct socket link or\n\ 33 \032 tunneling over an encrypted ssh connection. It is careful with\n\ 34 \032 network bandwidth, and runs well over slow links. Transfers of\n\ 35 \032 small updates to large files are optimized using a compression\n\ 36 \032 protocol similar to rsync.\n\ 37 \032 * Unison has a clear and precise specification, described below.\n\ 38 \032 * Unison is resilient to failure. It is careful to leave the replicas\n\ 39 \032 and its own private structures in a sensible state at all times,\n\ 40 \032 even in case of abnormal termination or communication failures.\n\ 41 \032 * Unison is free; full source code is available under the GNU Public\n\ 42 \032 License.\n\ 43 \n\ 44 ")) 45 :: 46 ("", ("Preface", 47 "Preface\n\ 48 \n\ 49 ")) 50 :: 51 ("people", ("People", 52 "People\n\ 53 \n\ 54 \032 Benjamin Pierce (http://www.cis.upenn.edu/~bcpierce/) leads the Unison\n\ 55 \032 project. The current version of Unison was designed and implemented by\n\ 56 \032 Trevor Jim (http://www.research.att.com/~trevor/), Benjamin Pierce\n\ 57 \032 (http://www.cis.upenn.edu/~bcpierce/), and J\195\169r\195\180me Vouillon\n\ 58 \032 (http://www.pps.jussieu.fr/~vouillon/), with Alan Schmitt\n\ 59 \032 (http://alan.petitepomme.net/), Malo Denielou, Zhe Yang\n\ 60 \032 (http://www.brics.dk/~zheyang/), Sylvain Gommier, and Matthieu Goulay.\n\ 61 \032 The Mac user interface was started by Trevor Jim and enormously\n\ 62 \032 improved by Ben Willmore. Our implementation of the rsync\n\ 63 \032 (http://samba.org/rsync/) protocol was built by Norman Ramsey\n\ 64 \032 (http://www.eecs.harvard.edu/~nr/) and Sylvain Gommier. It is based on\n\ 65 \032 Andrew Tridgell (http://samba.anu.edu.au/~tridge/)\226\128\153s thesis work\n\ 66 \032 (http://samba.anu.edu.au/~tridge/phd_thesis.pdf) and inspired by his\n\ 67 \032 rsync (http://samba.org/rsync/) utility. The mirroring and merging\n\ 68 \032 functionality was implemented by Sylvain Roy, improved by Malo\n\ 69 \032 Denielou, and improved yet further by St\195\169phane Lescuyer. Jacques\n\ 70 \032 Garrigue (http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/) contributed\n\ 71 \032 the original Gtk version of the user interface; the Gtk2 version was\n\ 72 \032 built by Stephen Tse. Sundar Balasubramaniam helped build a prototype\n\ 73 \032 implementation of an earlier synchronizer in Java. Insik Shin\n\ 74 \032 (http://www.cis.upenn.edu/~ishin/) and Insup Lee\n\ 75 \032 (http://www.cis.upenn.edu/~lee/) contributed design ideas to this\n\ 76 \032 implementation. Cedric Fournet\n\ 77 \032 (http://research.microsoft.com/~fournet/) contributed to an even\n\ 78 \032 earlier prototype.\n\ 79 \n\ 80 ")) 81 :: 82 ("obtaining", ("Obtaining Unison", 83 "Obtaining Unison\n\ 84 \n\ 85 Source code\n\ 86 \n\ 87 \032 Unison is primarily distributed as source code, which contains\n\ 88 \032 instructions in INSTALL.md:\n\ 89 \n\ 90 \032 https://github.com/bcpierce00/unison\n\ 91 \n\ 92 Binaries\n\ 93 \n\ 94 \032 The Unison wiki contains information about builds done as part of\n\ 95 \032 Continuous Integration and other sources of binaries; read the entire\n\ 96 \032 wiki at:\n\ 97 \n\ 98 \032 https://github.com/bcpierce00/unison/wiki\n\ 99 \n\ 100 ")) 101 :: 102 ("development", ("Community, Maintenance, and Development", 103 "Community, Maintenance, and Development\n\ 104 \n\ 105 \032 Many people use and contribute to Unison. This community has two main\n\ 106 \032 homes.\n\ 107 \n\ 108 Mailinglists\n\ 109 \n\ 110 \032 Most discussion is appropriate on one of the mailinglists:\n\ 111 \n\ 112 \032 https://github.com/bcpierce00/unison/wiki/Mailing-Lists\n\ 113 \n\ 114 Reporting Bugs\n\ 115 \n\ 116 \032 Bug reports and feature requests may be made after reading the\n\ 117 \032 guidelines:\n\ 118 \n\ 119 \032 https://github.com/bcpierce00/unison/wiki/Reporting-Bugs-and-Feature\n\ 120 \032 -Requests\n\ 121 \n\ 122 \032 Help improving Unison is welcome; see CONTRIBUTING.md in the sources.\n\ 123 \n\ 124 ")) 125 :: 126 ("copying", ("Copying", 127 "Copying\n\ 128 \n\ 129 \032 This file is part of Unison.\n\ 130 \n\ 131 \032 Unison is free software: you can redistribute it and/or modify it under\n\ 132 \032 the terms of the GNU General Public License as published by the Free\n\ 133 \032 Software Foundation, either version 3 of the License, or (at your\n\ 134 \032 option) any later version.\n\ 135 \n\ 136 \032 Unison is distributed in the hope that it will be useful, but WITHOUT\n\ 137 \032 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n\ 138 \032 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License\n\ 139 \032 for more details.\n\ 140 \n\ 141 \032 The GNU General Public License can be found at\n\ 142 \032 http://www.gnu.org/licenses. A copy is also included in the Unison\n\ 143 \032 source distribution in the file COPYING.\n\ 144 \n\ 145 ")) 146 :: 147 ("ack", ("Acknowledgements", 148 "Acknowledgements\n\ 149 \n\ 150 \032 Work on Unison has been supported by the National Science Foundation\n\ 151 \032 under grants CCR-9701826 and ITR-0113226, Principles and Practice of\n\ 152 \032 Synchronization, and by University of Pennsylvania\226\128\153s Institute for\n\ 153 \032 Research in Cognitive Science (IRCS).\n\ 154 \n\ 155 ")) 156 :: 157 ("upgrading", ("Upgrading", 158 "Upgrading\n\ 159 \n\ 160 \032 (This section is perhaps misplaced, but is early because it is far\n\ 161 \032 better to have at least skimmed it than to not know it exists.)\n\ 162 \n\ 163 \032 Before upgrading, it is a good idea to run the old version one last\n\ 164 \032 time, to make sure all your replicas are completely synchronized. A new\n\ 165 \032 version of Unison will sometimes introduce a different format for the\n\ 166 \032 archive files used to remember information about the previous state of\n\ 167 \032 the replicas. In this case, the old archive will be ignored (not\n\ 168 \032 deleted \226\128\148 if you roll back to the previous version of Unison, you will\n\ 169 \032 find the old archives intact), which means that any differences between\n\ 170 \032 the replicas will show up as conflicts that need to be resolved\n\ 171 \032 manually.\n\ 172 \n\ 173 \032 As of version 2.52, Unison has a degree of backward and forward\n\ 174 \032 compatibility. This means three things. First, it is possible for local\n\ 175 \032 and remote machines to run a different version of Unison. Second, it is\n\ 176 \032 possible for local and remote machines to run a version (same or\n\ 177 \032 different) of Unison built with a different version of OCaml compiler\n\ 178 \032 (this has been problematic historically). Lastly, it is possible to\n\ 179 \032 upgrade Unison on the local machine (compiled with any OCaml version)\n\ 180 \032 and keep the existing archive.\n\ 181 \n\ 182 \032 If version interoperability requirements are followed then Unison 2.52\n\ 183 \032 and newer can upgrade the archive created by earlier Unison versions.\n\ 184 \032 To avoid rebuilding archive files when upgrading from a version older\n\ 185 \032 than 2.52, you must install version 2.52 or newer built with the same\n\ 186 \032 OCaml version as your previous version of Unison, and then run it at\n\ 187 \032 least once on each root. Doing so will upgrade the archive file.\n\ 188 \n\ 189 \032 After upgrading the archive, you are free to swap the Unison 2.52 or\n\ 190 \032 newer executable to one compiled with a different version of OCaml. The\n\ 191 \032 archive file is no longer dependent on the compiler version.\n\ 192 \n\ 193 Version interoperability\n\ 194 \n\ 195 \032 To ensure interoperability with different Unison versions on local and\n\ 196 \032 remote machines, and to upgrade from an earlier version without\n\ 197 \032 rebuilding the archive files, you have to remember these guidelines.\n\ 198 \032 Upgrading from an incompatible version, while possible and normal, will\n\ 199 \032 require fully scanning both roots, which can be time-consuming with big\n\ 200 \032 replicas.\n\ 201 \n\ 202 \032 Unison 2.52 and newer are compatible with:\n\ 203 \032 * Unison 2.52 or newer (for as long as backwards compatibility is\n\ 204 \032 maintained in the newer versions). You do not have to pay any\n\ 205 \032 attention to OCaml compiler versions.\n\ 206 \032 * Unison 2.51 if both versions are compiled with same OCaml compiler\n\ 207 \032 version (you can see which compiler version was used by running\n\ 208 \032 unison -version).\n\ 209 \032 * Unison 2.48 if both versions are compiled with same OCaml compiler\n\ 210 \032 version. See special notes below.\n\ 211 \n\ 212 \032 Interoperability matrix for quick reference:\n\ 213 \n\ 214 \032 Client versions Server versions\n\ 215 \032 2.52 or newer 2.51 2.48\n\ 216 \032 2.52 or newer full interop same OCaml version same OCaml version\n\ 217 \032 2.51 same OCaml version full interop no interop\n\ 218 \032 2.48 same OCaml version* no interop full interop\n\ 219 \n\ 220 \032 Special notes for Unison 2.48:\n\ 221 \032 * Unison 2.48 does not show which OCaml compiler was used to compile\n\ 222 \032 it. If you do not have the option of re-compiling the 2.48 version,\n\ 223 \032 you have two alternatives. First (and most likely to succeed), see\n\ 224 \032 what is the version of the OCaml compiler in the same package\n\ 225 \032 repository where you installed Unison 2.48 from, then use Unison\n\ 226 \032 2.52 compiled with that version. Second, you can just try Unison\n\ 227 \032 2.52 executables compiled with different OCaml versions and see\n\ 228 \032 which one works with your copy of Unison 2.48.\n\ 229 \032 * When running Unison 2.48 on the client machine with Unison 2.52 or\n\ 230 \032 newer on the server machine, you have to do some additional\n\ 231 \032 configuration. The Unison executable name on the server must start\n\ 232 \032 with unison-2.48 (just unison-2.48 is ok, as is unison-2.48.exe,\n\ 233 \032 but also unison-2.48+ocaml-4.05). If using TCP socket connection to\n\ 234 \032 the server then you\226\128\153re all set! If using ssh then you have to add\n\ 235 \032 one of the following options to your profile or as a command-line\n\ 236 \032 argument on the client machine: -addversionno; see the section\n\ 237 \032 \226\128\156Remote Usage\226\128\157 , or -servercmd; see the section \226\128\156Remote Shell\n\ 238 \032 Method\226\128\157 .\n\ 239 \n\ 240 ")) 241 :: 242 ("tutorial", ("Tutorial", 243 "Tutorial\n\ 244 \n\ 245 Preliminaries\n\ 246 \n\ 247 \032 Unison can be used with either of two user interfaces:\n\ 248 \032 1. a textual interface and\n\ 249 \032 2. a graphical interface\n\ 250 \n\ 251 \032 The textual interface is more convenient for running from scripts and\n\ 252 \032 works on dumb terminals; the graphical interface is better for most\n\ 253 \032 interactive use. For this tutorial, you can use either. If you are\n\ 254 \032 running Unison from the command line, just typing unison will select\n\ 255 \032 either the text or the graphical interface, depending on which has been\n\ 256 \032 selected as default when the executable you are running was built. You\n\ 257 \032 can force the text interface even if graphical is the default by adding\n\ 258 \032 -ui text. The other command-line arguments to both versions are\n\ 259 \032 identical.\n\ 260 \n\ 261 \032 The graphical version can also be run directly by clicking on its icon.\n\ 262 \032 For this tutorial, we assume that you\226\128\153re starting it from the command\n\ 263 \032 line.\n\ 264 \n\ 265 \032 Unison can synchronize files and directories on a single machine, or\n\ 266 \032 between two machines on a network. (The same program runs on both\n\ 267 \032 machines; the only difference is which one is responsible for\n\ 268 \032 displaying the user interface.) If you\226\128\153re only interested in a\n\ 269 \032 single-machine setup, then let\226\128\153s call that machine the CLIENT . If\n\ 270 \032 you\226\128\153re synchronizing two machines, let\226\128\153s call them CLIENT and SERVER .\n\ 271 \n\ 272 Local Usage\n\ 273 \n\ 274 \032 Let\226\128\153s get the client machine set up first and see how to synchronize\n\ 275 \032 two directories on a single machine.\n\ 276 \n\ 277 \032 Ensure that unison is installed on your system.\n\ 278 \n\ 279 \032 Create a small test directory a.tmp containing a couple of files and/or\n\ 280 \032 subdirectories, e.g.,\n\ 281 \032 mkdir a.tmp\n\ 282 \032 touch a.tmp/a a.tmp/b\n\ 283 \032 mkdir a.tmp/d\n\ 284 \032 touch a.tmp/d/f\n\ 285 \n\ 286 \032 Copy this directory to b.tmp:\n\ 287 \032 cp -r a.tmp b.tmp\n\ 288 \n\ 289 \032 Now try synchronizing a.tmp and b.tmp. (Since they are identical,\n\ 290 \032 synchronizing them won\226\128\153t propagate any changes, but Unison will\n\ 291 \032 remember the current state of both directories so that it will be able\n\ 292 \032 to tell next time what has changed.) Type:\n\ 293 \032 unison a.tmp b.tmp\n\ 294 \n\ 295 \032 (You may need to add -ui text, depending how your unison binary was\n\ 296 \032 built.)\n\ 297 \n\ 298 \032 Textual Interface:\n\ 299 \032 * You should see a message notifying you that all the files are\n\ 300 \032 actually equal and then get returned to the command line.\n\ 301 \n\ 302 \032 Graphical Interface:\n\ 303 \032 * You should get a big empty window with a message at the bottom\n\ 304 \032 notifying you that all files are identical. Choose the Exit item\n\ 305 \032 from the File menu to get back to the command line.\n\ 306 \n\ 307 \032 Next, make some changes in a.tmp and/or b.tmp. For example:\n\ 308 \032 rm a.tmp/a\n\ 309 \032 echo \"Hello\" > a.tmp/b\n\ 310 \032 echo \"Hello\" > b.tmp/b\n\ 311 \032 date > b.tmp/c\n\ 312 \032 echo \"Hi there\" > a.tmp/d/h\n\ 313 \032 echo \"Hello there\" > b.tmp/d/h\n\ 314 \n\ 315 \032 Run Unison again:\n\ 316 \032 unison a.tmp b.tmp\n\ 317 \n\ 318 \032 This time, the user interface will display only the files that have\n\ 319 \032 changed. If a file has been modified in just one replica, then it will\n\ 320 \032 be displayed with an arrow indicating the direction that the change\n\ 321 \032 needs to be propagated. For example,\n\ 322 \032 <--- new file c [f]\n\ 323 \n\ 324 \032 indicates that the file c has been modified only in the second replica,\n\ 325 \032 and that the default action is therefore to propagate the new version\n\ 326 \032 to the first replica. To follow Unison\226\128\153s recommendation, press the \226\128\156f\226\128\157\n\ 327 \032 at the prompt.\n\ 328 \n\ 329 \032 If both replicas are modified and their contents are different, then\n\ 330 \032 the changes are in conflict: <-?-> is displayed to indicate that Unison\n\ 331 \032 needs guidance on which replica should override the other.\n\ 332 \032 new file <-?-> new file d/h []\n\ 333 \n\ 334 \032 By default, neither version will be propagated and both replicas will\n\ 335 \032 remain as they are.\n\ 336 \n\ 337 \032 If both replicas have been modified but their new contents are the same\n\ 338 \032 (as with the file b), then no propagation is necessary and nothing is\n\ 339 \032 shown. Unison simply notes that the file is up to date.\n\ 340 \n\ 341 \032 These display conventions are used by both versions of the user\n\ 342 \032 interface. The only difference lies in the way in which Unison\226\128\153s\n\ 343 \032 default actions are either accepted or overridden by the user.\n\ 344 \n\ 345 \032 Textual Interface:\n\ 346 \032 * The status of each modified file is displayed, in turn. When the\n\ 347 \032 copies of a file in the two replicas are not identical, the user\n\ 348 \032 interface will ask for instructions as to how to propagate the\n\ 349 \032 change. If some default action is indicated (by an arrow), you can\n\ 350 \032 simply press Return to go on to the next changed file. If you want\n\ 351 \032 to do something different with this file, press \226\128\156<\226\128\157 or \226\128\156>\226\128\157 to force\n\ 352 \032 the change to be propagated from right to left or from left to\n\ 353 \032 right, or else press \226\128\156/\226\128\157 to skip this file and leave both replicas\n\ 354 \032 alone. When it reaches the end of the list of modified files,\n\ 355 \032 Unison will ask you one more time whether it should proceed with\n\ 356 \032 the updates that have been selected.\n\ 357 \032 When Unison stops to wait for input from the user, pressing \226\128\156?\226\128\157\n\ 358 \032 will always give a list of possible responses and their meanings.\n\ 359 \n\ 360 \032 Graphical Interface:\n\ 361 \032 * The main window shows all the files that have been modified in\n\ 362 \032 either a.tmp or b.tmp. To override a default action (or to select\n\ 363 \032 an action in the case when there is no default), first select the\n\ 364 \032 file, either by clicking on its name or by using the up- and\n\ 365 \032 down-arrow keys. Then press either the left-arrow or \226\128\156<\226\128\157 key (to\n\ 366 \032 cause the version in b.tmp to propagate to a.tmp) or the\n\ 367 \032 right-arrow or \226\128\156>\226\128\157 key (which makes the a.tmp version override\n\ 368 \032 b.tmp).\n\ 369 \032 Every keyboard command can also be invoked from the menus at the\n\ 370 \032 top of the user interface. (Conversely, each menu item is annotated\n\ 371 \032 with its keyboard equivalent, if it has one.)\n\ 372 \032 When you are satisfied with the directions for the propagation of\n\ 373 \032 changes as shown in the main window, click the \226\128\156Go\226\128\157 button to set\n\ 374 \032 them in motion. A check sign will be displayed next to each\n\ 375 \032 filename when the file has been dealt with.\n\ 376 \n\ 377 Remote Usage\n\ 378 \n\ 379 \032 Next, we\226\128\153ll get Unison set up to synchronize replicas on two different\n\ 380 \032 machines.\n\ 381 \n\ 382 \032 NB: Unison has not been designed to run with elevated privileges (e.g.\n\ 383 \032 setuid), and it has not been audited for that environment. Therefore\n\ 384 \032 Unison should be run with the userid of the owner of the files to be\n\ 385 \032 synchronized, and should never be run setuid or similar. (Problems\n\ 386 \032 encountered when running setuid etc. must be reproduced without setuid\n\ 387 \032 before being reported as bugs.)\n\ 388 \n\ 389 \032 Follow the instructions in the Installation section to download or\n\ 390 \032 build an executable version of Unison on the server machine, and\n\ 391 \032 install it somewhere on your search path. (It doesn\226\128\153t matter whether\n\ 392 \032 you install the textual or graphical version, since the copy of Unison\n\ 393 \032 on the server doesn\226\128\153t need to display any user interface at all. The\n\ 394 \032 major benefit of installing the textual version is that it doesn\226\128\153t have\n\ 395 \032 any external dependencies required by the GUI executable.)\n\ 396 \n\ 397 \032 It is important that the version of Unison installed on the server\n\ 398 \032 machine is the same as the version of Unison on the client machine. But\n\ 399 \032 some flexibility on the version of Unison at the client side can be\n\ 400 \032 achieved by using the -addversionno option; see the section\n\ 401 \032 \226\128\156Preferences\226\128\157 .\n\ 402 \n\ 403 \032 Now there is a decision to be made. Unison provides two methods for\n\ 404 \032 communicating between the client and the server:\n\ 405 \032 * Remote shell method: To use this method, you must have some way of\n\ 406 \032 invoking remote commands on the server from the client\226\128\153s command\n\ 407 \032 line, using a facility such as ssh. This method is more convenient\n\ 408 \032 (since there is no need to manually start a \226\128\156unison server\226\128\157 process\n\ 409 \032 on the server) and also more secure, assuming you are using ssh).\n\ 410 \032 * TCP socket method: This method requires only that you can get TCP\n\ 411 \032 packets from the client to the server and back. It is insecure and\n\ 412 \032 should not be used.\n\ 413 \032 * Unix socket method: This method only works within a single machine.\n\ 414 \032 It is similar to the TCP sockets method, but it is possible to\n\ 415 \032 configure it securely.\n\ 416 \n\ 417 \032 Decide which of these you want to try, and continue with the section\n\ 418 \032 \226\128\156Remote Shell Method\226\128\157 or the section \226\128\156Socket Method\226\128\157 , as appropriate.\n\ 419 \n\ 420 Remote Shell Method\n\ 421 \n\ 422 \032 The standard remote shell facility on Unix systems is ssh.\n\ 423 \n\ 424 \032 Running ssh requires some coordination between the client and server\n\ 425 \032 machines to establish that the client is allowed to invoke commands on\n\ 426 \032 the server; please refer to the ssh documentation for information on\n\ 427 \032 how to set this up.\n\ 428 \n\ 429 \032 First, test that we can invoke Unison on the server from the client.\n\ 430 \032 Typing\n\ 431 \032 ssh remotehostname unison -version\n\ 432 \n\ 433 \032 should print the same version information as running\n\ 434 \032 unison -version\n\ 435 \n\ 436 \032 locally on the client. If remote execution fails, then either something\n\ 437 \032 is wrong with your ssh setup (e.g., \226\128\156permission denied\226\128\157) or else the\n\ 438 \032 search path that\226\128\153s being used when executing commands on the server\n\ 439 \032 doesn\226\128\153t contain the unison executable (e.g., \226\128\156command not found\226\128\157).\n\ 440 \n\ 441 \032 Create a test directory a.tmp in your home directory on the client\n\ 442 \032 machine.\n\ 443 \n\ 444 \032 Test that the local unison client can start and connect to the remote\n\ 445 \032 server. Type\n\ 446 \032 unison -testServer a.tmp ssh://remotehostname/a.tmp\n\ 447 \n\ 448 \032 Now cd to your home directory and type:\n\ 449 \032 unison a.tmp ssh://remotehostname/a.tmp\n\ 450 \n\ 451 \032 The result should be that the entire directory a.tmp is propagated from\n\ 452 \032 the client to your home directory on the server.\n\ 453 \n\ 454 \032 After finishing the first synchronization, change a few files and try\n\ 455 \032 synchronizing again. You should see similar results as in the local\n\ 456 \032 case.\n\ 457 \n\ 458 \032 If your user name on the server is not the same as on the client, you\n\ 459 \032 need to specify it on the command line:\n\ 460 \032 unison a.tmp ssh://username@remotehostname/a.tmp\n\ 461 \n\ 462 \032 Notes:\n\ 463 \032 * If you want to put a.tmp some place other than your home directory\n\ 464 \032 on the remote host, you can give an absolute path for it by adding\n\ 465 \032 an extra slash between remotehostname and the beginning of the\n\ 466 \032 path:\n\ 467 \032 unison a.tmp ssh://remotehostname//absolute/path/to/a.tmp\n\ 468 \n\ 469 \032 * You can give an explicit path for the unison executable on the\n\ 470 \032 server by using the command-line option \"-servercmd\n\ 471 \032 /full/path/name/of/unison\" or adding\n\ 472 \032 \"servercmd=/full/path/name/of/unison\" to your profile (see the\n\ 473 \032 section \226\128\156Profiles\226\128\157 ). Similarly, you can specify an explicit path\n\ 474 \032 for the ssh program using the \"-sshcmd\" option. Extra arguments can\n\ 475 \032 be passed to ssh by setting the -sshargs preference.\n\ 476 \032 * By leveraging \"-sshcmd\" and \"-sshargs\", you can effectively use any\n\ 477 \032 remote shell program, not just ssh; just remember that the roots\n\ 478 \032 are still specified with ssh as the protocol, that is, they have to\n\ 479 \032 start with \"ssh://\".\n\ 480 \n\ 481 Socket Method\n\ 482 \n\ 483 \032 To run Unison over a socket connection, you must start a Unison daemon\n\ 484 \032 process on the server. This process runs continuously, waiting for\n\ 485 \032 connections over a given socket from client machines running Unison and\n\ 486 \032 processing their requests in turn.\n\ 487 \n\ 488 \032 Since the socket method is not used by many people, its functionality\n\ 489 \032 is rather limited. For example, the server can only deal with one\n\ 490 \032 client at a time.\n\ 491 \n\ 492 \032 Note that the Unison daemon process is always started with a\n\ 493 \032 command-line argument; not from a profile.\n\ 494 \n\ 495 TCP Sockets\n\ 496 \n\ 497 \032 Warning: The TCP socket method is insecure: not only are the texts\n\ 498 \032 of your changes transmitted over the network in unprotected form, it\n\ 499 \032 is also possible for anyone in the world to connect to the server\n\ 500 \032 process and read out the contents of your filesystem! (Of course, to\n\ 501 \032 do this they must understand the protocol that Unison uses to\n\ 502 \032 communicate between client and server, but all they need for this is\n\ 503 \032 a copy of the Unison sources.) The socket method is provided only\n\ 504 \032 for expert users with specific needs; everyone else should use the\n\ 505 \032 ssh method.\n\ 506 \n\ 507 \032 To start the daemon for connections over a TCP socket, type\n\ 508 \032 unison -socket NNNN\n\ 509 \n\ 510 \032 on the server machine, where NNNN is the TCP port number that the\n\ 511 \032 daemon should listen on for connections from clients. (NNNN can be any\n\ 512 \032 large number that is not being used by some other program; if NNNN is\n\ 513 \032 already in use, Unison will exit with an error message.)\n\ 514 \n\ 515 \032 Create a test directory a.tmp in your home directory on the client\n\ 516 \032 machine. Now type:\n\ 517 \032 unison a.tmp socket://remotehostname:NNNN/a.tmp\n\ 518 \n\ 519 \032 Note that paths specified by the client will be interpreted relative to\n\ 520 \032 the directory in which you start the server process; this behavior is\n\ 521 \032 different from the ssh case, where the path is relative to your home\n\ 522 \032 directory on the server. The result should be that the entire directory\n\ 523 \032 a.tmp is propagated from the client to the server (a.tmp will be\n\ 524 \032 created on the server in the directory that the server was started\n\ 525 \032 from). After finishing the first synchronization, change a few files\n\ 526 \032 and try synchronizing again. You should see similar results as in the\n\ 527 \032 local case.\n\ 528 \n\ 529 \032 By default Unison will listen for incoming connections on all\n\ 530 \032 interfaces. If you want to limit this to certain interfaces or\n\ 531 \032 addresses then you can use the -listen command-line argument,\n\ 532 \032 specifying a host name or an IP address to listen on. -listen can be\n\ 533 \032 given multiple times to listen on several addresses.\n\ 534 \n\ 535 Unix Domain Sockets\n\ 536 \n\ 537 \032 To start the daemon for connections over a Unix domain socket, type\n\ 538 \032 unison -socket PPPP\n\ 539 \n\ 540 \032 where PPPP is the path to a Unix socket that the daemon should open for\n\ 541 \032 connections from clients. (PPPP can be any absolute or relative path\n\ 542 \032 the server process has access to but it must not exist yet; the socket\n\ 543 \032 is created at that path when the daemon process is started.) You are\n\ 544 \032 responsible for securing access to the socket path. For example, this\n\ 545 \032 can be done by controlling the permissions of socket\226\128\153s parent\n\ 546 \032 directory, or ensuring a restrictive umask value when starting Unison.\n\ 547 \n\ 548 \032 Clients can connect to a server over a Unix domain socket by specifying\n\ 549 \032 the absolute or relative path to the socket, instead of a server\n\ 550 \032 address and port number:\n\ 551 \032 unison a.tmp socket://{path/to/unix/socket}/a.tmp\n\ 552 \n\ 553 \032 (socket path is enclosed in curly braces).\n\ 554 \n\ 555 \032 Note that Unix domain sockets are local sockets (they exist in the\n\ 556 \032 filesystem namespace). One could use Unixs socket remotely, by\n\ 557 \032 forwarding access to the socket by other means, for example by using\n\ 558 \032 spiped secure pipe daemon.\n\ 559 \n\ 560 Using Unison for All Your Files\n\ 561 \n\ 562 \032 Once you are comfortable with the basic operation of Unison, you may\n\ 563 \032 find yourself wanting to use it regularly to synchronize your commonly\n\ 564 \032 used files. There are several possible ways of going about this:\n\ 565 \032 1. Synchronize your whole home directory, using the Ignore facility\n\ 566 \032 (see the section \226\128\156Ignoring Paths\226\128\157 ) to avoid synchronizing\n\ 567 \032 temporary files and things that only belong on one host.\n\ 568 \032 2. Create a subdirectory called shared (or current, or whatever) in\n\ 569 \032 your home directory on each host, and put all the files you want to\n\ 570 \032 synchronize into this directory.\n\ 571 \032 3. Create a subdirectory called shared (or current, or whatever) in\n\ 572 \032 your home directory on each host, and put links to all the files\n\ 573 \032 you want to synchronize into this directory. Use the follow\n\ 574 \032 preference (see the section \226\128\156Symbolic Links\226\128\157 ) to make Unison treat\n\ 575 \032 these links as transparent.\n\ 576 \032 4. Make your home directory the root of the synchronization, but tell\n\ 577 \032 Unison to synchronize only some of the files and subdirectories\n\ 578 \032 within it on any given run. This can be accomplished by using the\n\ 579 \032 -path switch on the command line:\n\ 580 \032 unison /home/username ssh://remotehost//home/username -path shared\n\ 581 \n\ 582 \032 The -path option can be used as many times as needed, to\n\ 583 \032 synchronize several files or subdirectories:\n\ 584 \032 unison /home/username ssh://remotehost//home/username \\\n\ 585 \032 -path shared \\\n\ 586 \032 -path pub \\\n\ 587 \032 -path .netscape/bookmarks.html\n\ 588 \n\ 589 \032 These -path arguments can also be put in your preference file. See\n\ 590 \032 the section \226\128\156Preferences\226\128\157 for an example.\n\ 591 \n\ 592 \032 Most people find that they only need to maintain a profile (or\n\ 593 \032 profiles) on one of the hosts that they synchronize, since Unison is\n\ 594 \032 always initiated from this host. (For example, if you\226\128\153re synchronizing\n\ 595 \032 a laptop with a fileserver, you\226\128\153ll probably always run Unison on the\n\ 596 \032 laptop.) This is a bit different from the usual situation with\n\ 597 \032 asymmetric mirroring programs like rdist, where the mirroring operation\n\ 598 \032 typically needs to be initiated from the machine with the most recent\n\ 599 \032 changes. the section \226\128\156Profiles\226\128\157 covers the syntax of Unison profiles,\n\ 600 \032 together with some sample profiles.\n\ 601 \n\ 602 Using Unison to Synchronize More Than Two Machines\n\ 603 \n\ 604 \032 Unison is designed for synchronizing pairs of replicas. However, it is\n\ 605 \032 possible to use it to keep larger groups of machines in sync by\n\ 606 \032 performing multiple pairwise synchronizations.\n\ 607 \n\ 608 \032 If you need to do this, the most reliable way to set things up is to\n\ 609 \032 organize the machines into a \226\128\156star topology,\226\128\157 with one machine\n\ 610 \032 designated as the \226\128\156hub\226\128\157 and the rest as \226\128\156spokes,\226\128\157 and with each spoke\n\ 611 \032 machine synchronizing only with the hub. The big advantage of the star\n\ 612 \032 topology is that it eliminates the possibility of confusing \226\128\156spurious\n\ 613 \032 conflicts\226\128\157 arising from the fact that a separate archive is maintained\n\ 614 \032 by Unison for every pair of hosts that it synchronizes.\n\ 615 \n\ 616 Going Further\n\ 617 \n\ 618 \032 On-line documentation for the various features of Unison can be\n\ 619 \032 obtained either by typing\n\ 620 \032 unison -doc topics\n\ 621 \n\ 622 \032 at the command line, or by selecting the Help menu in the graphical\n\ 623 \032 user interface. The same information is also available in a typeset\n\ 624 \032 User\226\128\153s Manual (HTML or PostScript format) through\n\ 625 \032 https://github.com/bcpierce00/unison/wiki.\n\ 626 \n\ 627 \032 If you use Unison regularly, you should subscribe to one of the mailing\n\ 628 \032 lists, to receive announcements of new versions. See the section\n\ 629 \032 \226\128\156Obtaining Unison\226\128\157 .\n\ 630 \n\ 631 ")) 632 :: 633 ("basics", ("Basic Concepts", 634 "Basic Concepts\n\ 635 \n\ 636 \032 To understand how Unison works, it is necessary to discuss a few\n\ 637 \032 straightforward concepts.\n\ 638 \n\ 639 \032 These concepts are developed more rigorously and at more length in a\n\ 640 \032 number of papers, available at\n\ 641 \032 http://www.cis.upenn.edu/~bcpierce/papers. But the informal\n\ 642 \032 presentation here should be enough for most users.\n\ 643 \n\ 644 Roots\n\ 645 \n\ 646 \032 A replica\226\128\153s root tells Unison where to find a set of files to be\n\ 647 \032 synchronized, either on the local machine or on a remote host. For\n\ 648 \032 example,\n\ 649 \032 relative/path/of/root\n\ 650 \n\ 651 \032 specifies a local root relative to the directory where Unison is\n\ 652 \032 started, while\n\ 653 \032 /absolute/path/of/root\n\ 654 \n\ 655 \032 specifies a root relative to the top of the local filesystem,\n\ 656 \032 independent of where Unison is running. Remote roots can begin with\n\ 657 \032 ssh:// to indicate that the remote server should be started with ssh:\n\ 658 \032 ssh://remotehost//absolute/path/of/root\n\ 659 \032 ssh://user@remotehost/relative/path/of/root\n\ 660 \n\ 661 \032 If the remote server is already running (in the socket mode), then the\n\ 662 \032 syntax\n\ 663 \032 socket://remotehost:portnum//absolute/path/of/root\n\ 664 \032 socket://remotehost:portnum/relative/path/of/root\n\ 665 \032 socket://[IPv6literal]:portnum/path\n\ 666 \n\ 667 \032 is used to specify the hostname and the port that the client Unison\n\ 668 \032 should use to contact it. Syntax\n\ 669 \032 socket://{path/of/socket}//absolute/path/of/root\n\ 670 \032 socket://{path/of/socket}/relative/path/of/root\n\ 671 \n\ 672 \032 is used to specify the Unix domain socket the client Unison should use\n\ 673 \032 to contact the server.\n\ 674 \n\ 675 \032 The syntax for roots is based on that of URIs (described in RFC 2396).\n\ 676 \032 The full grammar is:\n\ 677 \032 replica ::= [protocol:]//[user@][host][:port][/path]\n\ 678 \032 | path\n\ 679 \n\ 680 \032 protocol ::= file\n\ 681 \032 | socket\n\ 682 \032 | ssh\n\ 683 \n\ 684 \032 user ::= [-_a-zA-Z0-9%@]+\n\ 685 \n\ 686 \032 host ::= [-_a-zA-Z0-9.]+\n\ 687 \032 | \\[ [a-f0-9:.]+ zone? \\] IPv6 literals (no future format).\n\ 688 \032 | { [^}]+ } For Unix domain sockets only.\n\ 689 \n\ 690 \032 zone ::= %[-_a-zA-Z0-9~%.]+\n\ 691 \n\ 692 \032 port ::= [0-9]+\n\ 693 \n\ 694 \032 When path is given without any protocol prefix, the protocol is assumed\n\ 695 \032 to be file:. Under Windows, it is possible to synchronize with a remote\n\ 696 \032 directory using the file: protocol over the Windows Network\n\ 697 \032 Neighborhood. For example,\n\ 698 \032 unison foo //host/drive/bar\n\ 699 \n\ 700 \032 synchronizes the local directory foo with the directory drive:\\bar on\n\ 701 \032 the machine host, provided that host is accessible via Network\n\ 702 \032 Neighborhood. When the file: protocol is used in this way, there is no\n\ 703 \032 need for a Unison server to be running on the remote host. However,\n\ 704 \032 running Unison this way is only a good idea if the remote host is\n\ 705 \032 reached by a very fast network connection, since the full contents of\n\ 706 \032 every file in the remote replica will have to be transferred to the\n\ 707 \032 local machine to detect updates.\n\ 708 \n\ 709 \032 The names of roots are canonized by Unison before it uses them to\n\ 710 \032 compute the names of the corresponding archive files, so\n\ 711 \032 //saul//home/bcpierce/common and //saul.cis.upenn.edu/common will be\n\ 712 \032 recognized as the same replica under different names.\n\ 713 \n\ 714 Paths\n\ 715 \n\ 716 \032 A path refers to a point within a set of files being synchronized; it\n\ 717 \032 is specified relative to the root of the replica.\n\ 718 \n\ 719 \032 Formally, a path is just a sequence of names, separated by /. Note that\n\ 720 \032 the path separator character is always a forward slash, no matter what\n\ 721 \032 operating system Unison is running on. Forward slashes are converted to\n\ 722 \032 backslashes as necessary when paths are converted to filenames in the\n\ 723 \032 local filesystem on a particular host. (For example, suppose that we\n\ 724 \032 run Unison on a Windows system, synchronizing the local root c:\\pierce\n\ 725 \032 with the root ssh://saul.cis.upenn.edu/home/bcpierce on a Unix server.\n\ 726 \032 Then the path current/todo.txt refers to the file\n\ 727 \032 c:\\pierce\\current\\todo.txt on the client and\n\ 728 \032 /home/bcpierce/current/todo.txt on the server.)\n\ 729 \n\ 730 \032 The empty path (i.e., the empty sequence of names) denotes the whole\n\ 731 \032 replica. Unison displays the empty path as \226\128\156[root].\226\128\157\n\ 732 \n\ 733 \032 If p is a path and q is a path beginning with p, then q is said to be a\n\ 734 \032 descendant of p. (Each path is also a descendant of itself.)\n\ 735 \n\ 736 What is an Update?\n\ 737 \n\ 738 \032 The contents of a path p in a particular replica could be a file, a\n\ 739 \032 directory, a symbolic link, or absent (if p does not refer to anything\n\ 740 \032 at all in that replica). More specifically:\n\ 741 \032 * If p refers to an ordinary file, then the contents of p are the\n\ 742 \032 actual contents of this file (a string of bytes) plus the current\n\ 743 \032 permission bits of the file.\n\ 744 \032 * If p refers to a symbolic link, then the contents of p are just the\n\ 745 \032 string specifying where the link points.\n\ 746 \032 * If p refers to a directory, then the contents of p are just the\n\ 747 \032 token \226\128\156DIRECTORY\226\128\157 plus the current permission bits of the\n\ 748 \032 directory.\n\ 749 \032 * If p does not refer to anything in this replica, then the contents\n\ 750 \032 of p are the token \226\128\156ABSENT.\226\128\157\n\ 751 \n\ 752 \032 Unison keeps a record of the contents of each path after each\n\ 753 \032 successful synchronization of that path (i.e., it remembers the\n\ 754 \032 contents at the last moment when they were the same in the two\n\ 755 \032 replicas).\n\ 756 \n\ 757 \032 We say that a path is updated (in some replica) if its current contents\n\ 758 \032 are different from its contents the last time it was successfully\n\ 759 \032 synchronized. Note that whether a path is updated has nothing to do\n\ 760 \032 with its last modification time\226\128\148Unison considers only the contents when\n\ 761 \032 determining whether an update has occurred. This means that touching a\n\ 762 \032 file without changing its contents will not be recognized as an update.\n\ 763 \032 A file can even be changed several times and then changed back to its\n\ 764 \032 original contents; as long as Unison is only run at the end of this\n\ 765 \032 process, no update will be recognized.\n\ 766 \n\ 767 \032 What Unison actually calculates is a close approximation to this\n\ 768 \032 definition; see the section \226\128\156Caveats and Shortcomings\226\128\157 .\n\ 769 \n\ 770 What is a Conflict?\n\ 771 \n\ 772 \032 A path is said to be conflicting if the following conditions all hold:\n\ 773 \032 1. it has been updated in one replica,\n\ 774 \032 2. it or any of its descendants has been updated in the other replica,\n\ 775 \032 and\n\ 776 \032 3. its contents in the two replicas are not identical.\n\ 777 \n\ 778 Reconciliation\n\ 779 \n\ 780 \032 Unison operates in several distinct stages:\n\ 781 \032 1. On each host, it compares its archive file (which records the state\n\ 782 \032 of each path in the replica when it was last synchronized) with the\n\ 783 \032 current contents of the replica, to determine which paths have been\n\ 784 \032 updated.\n\ 785 \032 2. It checks for \226\128\156false conflicts\226\128\157 \226\128\148 paths that have been updated on\n\ 786 \032 both replicas, but whose current values are identical. These paths\n\ 787 \032 are silently marked as synchronized in the archive files in both\n\ 788 \032 replicas.\n\ 789 \032 3. It displays all the updated paths to the user. For updates that do\n\ 790 \032 not conflict, it suggests a default action (propagating the new\n\ 791 \032 contents from the updated replica to the other). Conflicting\n\ 792 \032 updates are just displayed. The user is given an opportunity to\n\ 793 \032 examine the current state of affairs, change the default actions\n\ 794 \032 for nonconflicting updates, and choose actions for conflicting\n\ 795 \032 updates.\n\ 796 \032 4. It performs the selected actions, one at a time. Each action is\n\ 797 \032 performed by first transferring the new contents to a temporary\n\ 798 \032 file on the receiving host, then atomically moving them into place.\n\ 799 \032 5. It updates its archive files to reflect the new state of the\n\ 800 \032 replicas.\n\ 801 \n\ 802 ")) 803 :: 804 ("failures", ("Invariants", 805 "Invariants\n\ 806 \n\ 807 \032 Given the importance and delicacy of the job that it performs, it is\n\ 808 \032 important to understand both what a synchronizer does under normal\n\ 809 \032 conditions and what can happen under unusual conditions such as system\n\ 810 \032 crashes and communication failures.\n\ 811 \n\ 812 \032 Unison is careful to protect both its internal state and the state of\n\ 813 \032 the replicas at every point in this process. Specifically, the\n\ 814 \032 following guarantees are enforced:\n\ 815 \032 * At every moment, each path in each replica has either (1) its\n\ 816 \032 original contents (i.e., no change at all has been made to this\n\ 817 \032 path), or (2) its correct final contents (i.e., the value that the\n\ 818 \032 user expected to be propagated from the other replica).\n\ 819 \032 * At every moment, the information stored on disk about Unison\226\128\153s\n\ 820 \032 private state can be either (1) unchanged, or (2) updated to\n\ 821 \032 reflect those paths that have been successfully synchronized.\n\ 822 \n\ 823 \032 The upshot is that it is safe to interrupt Unison at any time, either\n\ 824 \032 manually or accidentally. [Caveat: the above is almost true there are\n\ 825 \032 occasionally brief periods where it is not (and, because of shortcoming\n\ 826 \032 of the Posix filesystem API, cannot be); in particular, when it is\n\ 827 \032 copying a file onto a directory or vice versa, it must first move the\n\ 828 \032 original contents out of the way. If Unison gets interrupted during one\n\ 829 \032 of these periods, some manual cleanup may be required. In this case, a\n\ 830 \032 file called DANGER.README will be left in the .unison directory,\n\ 831 \032 containing information about the operation that was interrupted. The\n\ 832 \032 next time you try to run Unison, it will notice this file and warn you\n\ 833 \032 about it.]\n\ 834 \n\ 835 \032 If an interruption happens while it is propagating updates, then there\n\ 836 \032 may be some paths for which an update has been propagated but which\n\ 837 \032 have not been marked as synchronized in Unison\226\128\153s archives. This is no\n\ 838 \032 problem: the next time Unison runs, it will detect changes to these\n\ 839 \032 paths in both replicas, notice that the contents are now equal, and\n\ 840 \032 mark the paths as successfully updated when it writes back its private\n\ 841 \032 state at the end of this run.\n\ 842 \n\ 843 \032 If Unison is interrupted, it may sometimes leave temporary working\n\ 844 \032 files (with suffix .tmp) in the replicas. It is safe to delete these\n\ 845 \032 files. Also, if the backups flag is set, Unison will leave around old\n\ 846 \032 versions of files that it overwrites, with names like\n\ 847 \032 file.0.unison.bak. These can be deleted safely when they are no longer\n\ 848 \032 wanted.\n\ 849 \n\ 850 \032 Unison is not bothered by clock skew between the different hosts on\n\ 851 \032 which it is running. It only performs comparisons between timestamps\n\ 852 \032 obtained from the same host, and the only assumption it makes about\n\ 853 \032 them is that the clock on each system always runs forward.\n\ 854 \n\ 855 \032 If Unison finds that its archive files have been deleted (or that the\n\ 856 \032 archive format has changed and they cannot be read, or that they don\226\128\153t\n\ 857 \032 exist because this is the first run of Unison on these particular\n\ 858 \032 roots), it takes a conservative approach: it behaves as though the\n\ 859 \032 replicas had both been completely empty at the point of the last\n\ 860 \032 synchronization. The effect of this is that, on the first run, files\n\ 861 \032 that exist in only one replica will be propagated to the other, while\n\ 862 \032 files that exist in both replicas but are unequal will be marked as\n\ 863 \032 conflicting.\n\ 864 \n\ 865 \032 Touching a file without changing its contents should never affect\n\ 866 \032 whether or not Unison does an update. (When running with the fastcheck\n\ 867 \032 preference set to true\226\128\148the default on Unix systems\226\128\148Unison uses file\n\ 868 \032 modtimes for a quick first pass to tell which files have definitely not\n\ 869 \032 changed; then, for each file that might have changed, it computes a\n\ 870 \032 fingerprint of the file\226\128\153s contents and compares it against the\n\ 871 \032 last-synchronized contents. Also, the -times option allows you to\n\ 872 \032 synchronize file times, but it does not cause identical files to be\n\ 873 \032 changed; Unison will only modify the file times.)\n\ 874 \n\ 875 \032 It is safe to \226\128\156brainwash\226\128\157 Unison by deleting its archive files on both\n\ 876 \032 replicas. The next time it runs, it will assume that all the files it\n\ 877 \032 sees in the replicas are new.\n\ 878 \n\ 879 \032 It is safe to modify files while Unison is working. If Unison discovers\n\ 880 \032 that it has propagated an out-of-date change, or that the file it is\n\ 881 \032 updating has changed on the target replica, it will signal a failure\n\ 882 \032 for that file. Run Unison again to propagate the latest change.\n\ 883 \n\ 884 \032 Changes to the ignore patterns from the user interface (e.g., using the\n\ 885 \032 \226\128\152i\226\128\153 key) are immediately reflected in the current profile.\n\ 886 \n\ 887 Caveats and Shortcomings\n\ 888 \n\ 889 \032 Here are some things to be careful of when using Unison.\n\ 890 \032 * In the interests of speed, the update detection algorithm may\n\ 891 \032 (depending on which OS architecture that you run Unison on)\n\ 892 \032 actually use an approximation to the definition given in the\n\ 893 \032 section \226\128\156What is an Update?\226\128\157 .\n\ 894 \032 In particular, the Unix implementation does not compare the actual\n\ 895 \032 contents of files to their previous contents, but simply looks at\n\ 896 \032 each file\226\128\153s inode number and modtime; if neither of these have\n\ 897 \032 changed, then it concludes that the file has not been changed.\n\ 898 \032 Under normal circumstances, this approximation is safe, in the\n\ 899 \032 sense that it may sometimes detect \226\128\156false updates\226\128\157 but will never\n\ 900 \032 miss a real one. However, it is possible to fool it, for example by\n\ 901 \032 using retouch to change a file\226\128\153s modtime back to a time in the\n\ 902 \032 past.\n\ 903 \032 * If you synchronize between a single-user filesystem and a shared\n\ 904 \032 Unix server, you should pay attention to your permission bits: by\n\ 905 \032 default, Unison will synchronize permissions verbatim, which may\n\ 906 \032 leave group-writable files on the server that could be written over\n\ 907 \032 by a lot of people.\n\ 908 \032 You can control this by setting your umask on both computers to\n\ 909 \032 something like 022, masking out the \226\128\156world write\226\128\157 and \226\128\156group write\226\128\157\n\ 910 \032 permission bits.\n\ 911 \032 Unison does not synchronize the setuid and setgid bits, for\n\ 912 \032 security.\n\ 913 \032 * The graphical user interface is single-threaded. This means that if\n\ 914 \032 Unison is performing some long-running operation, the display will\n\ 915 \032 not be repainted until it finishes. We recommend not trying to do\n\ 916 \032 anything with the user interface while Unison is in the middle of\n\ 917 \032 detecting changes or propagating files.\n\ 918 \032 * Unison does not understand hard links.\n\ 919 \032 * It is important to be a little careful when renaming directories\n\ 920 \032 containing ignored files.\n\ 921 \032 For example, suppose Unison is synchronizing directory A between\n\ 922 \032 the two machines called the \226\128\156local\226\128\157 and the \226\128\156remote\226\128\157 machine;\n\ 923 \032 suppose directory A contains a subdirectory D; and suppose D on the\n\ 924 \032 local machine contains a file or subdirectory P that matches an\n\ 925 \032 ignore directive in the profile used to synchronize. Thus path\n\ 926 \032 A/D/P exists on the local machine but not on the remote machine.\n\ 927 \032 If D is renamed to D\226\128\153 on the remote machine, and this change is\n\ 928 \032 propagated to the local machine, all such files or subdirectories P\n\ 929 \032 will be deleted. This is because Unison sees the rename as a delete\n\ 930 \032 and a separate create: it deletes the old directory (including the\n\ 931 \032 ignored files) and creates a new one (not including the ignored\n\ 932 \032 files, since they are completely invisible to it).\n\ 933 \n\ 934 ")) 935 :: 936 ("", ("Reference Guide", 937 "Reference Guide\n\ 938 \n\ 939 \032 This section covers the features of Unison in detail.\n\ 940 \n\ 941 ")) 942 :: 943 ("running", ("Running Unison", 944 "Running Unison\n\ 945 \n\ 946 \032 There are several ways to start Unison.\n\ 947 \032 * Typing \226\128\156unison profile\226\128\157 on the command line. Unison will look for a\n\ 948 \032 file profile.prf in the .unison directory. If this file does not\n\ 949 \032 specify a pair of roots, Unison will prompt for them and add them\n\ 950 \032 to the information specified by the profile.\n\ 951 \032 * Typing \226\128\156unison profile root1 root2\226\128\157 on the command line. In this\n\ 952 \032 case, Unison will use profile, which should not contain any root\n\ 953 \032 directives.\n\ 954 \032 * Typing \226\128\156unison root1 root2\226\128\157 on the command line. This has the same\n\ 955 \032 effect as typing \226\128\156unison default root1 root2.\226\128\157\n\ 956 \032 * Typing just \226\128\156unison\226\128\157 (or invoking Unison by clicking on a desktop\n\ 957 \032 icon). In this case, Unison will ask for the profile to use for\n\ 958 \032 synchronization (or create a new one, if necessary).\n\ 959 \n\ 960 The .unison Directory\n\ 961 \n\ 962 \032 Unison stores a variety of information in a private directory on each\n\ 963 \032 host. If the environment variable UNISON is defined, then its value\n\ 964 \032 will be used as the path/folder name for this directory. This can be\n\ 965 \032 just a name, or a path.\n\ 966 \n\ 967 \032 A name on it\226\128\153s own, for example UNISON=mytestname will place a folder\n\ 968 \032 in the same directory that the Unison binary was run in, with that\n\ 969 \032 name. Using a path like UNISON=../mytestname2 will place that folder in\n\ 970 \032 the folder above where the Unison binary was run from.\n\ 971 \n\ 972 \032 If UNISON is not defined, then the directory depends on which operating\n\ 973 \032 system you are using. In Unix, the default is to use $HOME/.unison. In\n\ 974 \032 Windows, if the environment variable USERPROFILE is defined, then the\n\ 975 \032 directory will be $USERPROFILE\\.unison; otherwise if HOME is defined,\n\ 976 \032 it will be $HOME\\.unison; otherwise, it will be c:\\.unison. On OS X,\n\ 977 \032 $HOME/.unison will be used if it is present, but\n\ 978 \032 $HOME/Library/Application Support/Unison will be created and used by\n\ 979 \032 default.\n\ 980 \n\ 981 \032 The archive file for each replica is found in the .unison directory on\n\ 982 \032 that replica\226\128\153s host. Profiles (described below) are always taken from\n\ 983 \032 the .unison directory on the client host.\n\ 984 \n\ 985 \032 Note that Unison maintains a completely different set of archive files\n\ 986 \032 for each pair of roots.\n\ 987 \n\ 988 \032 We do not recommend synchronizing the whole .unison directory, as this\n\ 989 \032 will involve frequent propagation of large archive files. It should be\n\ 990 \032 safe to do it, though, if you really want to. Synchronizing just the\n\ 991 \032 profile files in the .unison directory is definitely OK.\n\ 992 \n\ 993 Archive Files\n\ 994 \n\ 995 \032 The name of the archive file on each replica is calculated from\n\ 996 \032 * the canonical names of all the hosts (short names like saul are\n\ 997 \032 converted into full addresses like saul.cis.upenn.edu),\n\ 998 \032 * the paths to the replicas on all the hosts (again, relative\n\ 999 \032 pathnames, symbolic links, etc. are converted into full, absolute\n\ 1000 \032 paths), and\n\ 1001 \032 * an internal version number that is changed whenever a new Unison\n\ 1002 \032 release changes the format of the information stored in the\n\ 1003 \032 archive.\n\ 1004 \n\ 1005 \032 This method should work well for most users. However, it is\n\ 1006 \032 occasionally useful to change the way archive names are generated.\n\ 1007 \032 Unison provides two ways of doing this.\n\ 1008 \n\ 1009 \032 The function that finds the canonical hostname of the local host (which\n\ 1010 \032 is used, for example, in calculating the name of the archive file used\n\ 1011 \032 to remember which files have been synchronized) normally uses the\n\ 1012 \032 gethostname operating system call. However, if the environment variable\n\ 1013 \032 UNISONLOCALHOSTNAME is set, its value will be used instead. This makes\n\ 1014 \032 it easier to use Unison in situations where a machine\226\128\153s name changes\n\ 1015 \032 frequently (e.g., because it is a laptop and gets moved around a lot).\n\ 1016 \n\ 1017 \032 A more powerful way of changing archive names is provided by the\n\ 1018 \032 rootalias preference. The preference file may contain any number of\n\ 1019 \032 lines of the form:\n\ 1020 \032 rootalias = //hostnameA//path-to-replicaA -> //hostnameB/path-to-replicaB\n\ 1021 \n\ 1022 \032 When calculating the name of the archive files for a given pair of\n\ 1023 \032 roots, Unison replaces any root that matches the left-hand side of any\n\ 1024 \032 rootalias rule by the corresponding right-hand side.\n\ 1025 \n\ 1026 \032 So, if you need to relocate a root on one of the hosts, you can add a\n\ 1027 \032 rule of the form:\n\ 1028 \032 rootalias = //new-hostname//new-path -> //old-hostname/old-path\n\ 1029 \n\ 1030 \032 Note that root aliases are case-sensitive, even on case-insensitive\n\ 1031 \032 file systems.\n\ 1032 \n\ 1033 \032 Warning: The rootalias option is dangerous and should only be used if\n\ 1034 \032 you are sure you know what you\226\128\153re doing. In particular, it should only\n\ 1035 \032 be used if you are positive that either (1) both the original root and\n\ 1036 \032 the new alias refer to the same set of files, or (2) the files have\n\ 1037 \032 been relocated so that the original name is now invalid and will never\n\ 1038 \032 be used again. (If the original root and the alias refer to different\n\ 1039 \032 sets of files, Unison\226\128\153s update detector could get confused.) After\n\ 1040 \032 introducing a new rootalias, it is a good idea to run Unison a few\n\ 1041 \032 times interactively (with the batch flag off, etc.) and carefully check\n\ 1042 \032 that things look reasonable\226\128\148in particular, that update detection is\n\ 1043 \032 working as expected.\n\ 1044 \n\ 1045 Preferences\n\ 1046 \n\ 1047 \032 Many details of Unison\226\128\153s behavior are configurable by user-settable\n\ 1048 \032 \226\128\156preferences.\226\128\157\n\ 1049 \n\ 1050 \032 Some preferences are boolean-valued; these are often called flags.\n\ 1051 \032 Others take numeric or string arguments, indicated in the preferences\n\ 1052 \032 list by n or xxx. Some string arguments take the backslash as an escape\n\ 1053 \032 to include the next character literally; this is mostly useful to\n\ 1054 \032 escape a space or the backslash; a trailing backslash is ignored and is\n\ 1055 \032 useful to protect a trailing whitespace in the string that would\n\ 1056 \032 otherwise be trimmed. Most of the string preferences can be given\n\ 1057 \032 several times; the arguments are accumulated into a list internally.\n\ 1058 \n\ 1059 \032 There are two ways to set the values of preferences: temporarily, by\n\ 1060 \032 providing command-line arguments to a particular run of Unison, or\n\ 1061 \032 permanently, by adding commands to a profile in the .unison directory\n\ 1062 \032 on the client host. The order of preferences (either on the command\n\ 1063 \032 line or in preference files) is not significant. On the command line,\n\ 1064 \032 preferences and other arguments (the profile name and roots) can be\n\ 1065 \032 intermixed in any order.\n\ 1066 \n\ 1067 \032 To set the value of a preference p from the command line, add an\n\ 1068 \032 argument -p (for a boolean flag) or -p n or -p xxx (for a numeric or\n\ 1069 \032 string preference) anywhere on the command line. To set a boolean flag\n\ 1070 \032 to false on the command line, use -p=false.\n\ 1071 \n\ 1072 \032 Here are all the preferences supported by Unison. This list can be\n\ 1073 \032 obtained by typing unison -help.\n\ 1074 \n\ 1075 Usage: unison [options]\n\ 1076 \032 or unison root1 root2 [options]\n\ 1077 \032 or unison profilename [options]\n\ 1078 \n\ 1079 Basic options:\n\ 1080 \n\ 1081 \032 General:\n\ 1082 \032 -doc xxx show documentation ('-doc topics' lists topics)\n\ 1083 \032 -version print version and exit\n\ 1084 \n\ 1085 \032 What to sync:\n\ 1086 \032 -group synchronize group attributes\n\ 1087 \032 -ignore xxx add a pattern to the ignore list\n\ 1088 \032 -ignorenot xxx add a pattern to the ignorenot list\n\ 1089 \032 -nocreation xxx prevent file creations on one replica\n\ 1090 \032 -nodeletion xxx prevent file deletions on one replica\n\ 1091 \032 -noupdate xxx prevent file updates and deletions on one replica\n\ 1092 \032 -owner synchronize owner\n\ 1093 \032 -path xxx path to synchronize\n\ 1094 \032 -perms n part of the permissions which is synchronized\n\ 1095 \032 -root xxx root of a replica (should be used exactly twice)\n\ 1096 \032 -times synchronize modification times\n\ 1097 \n\ 1098 \032 How to sync:\n\ 1099 \032 -batch batch mode: ask no questions at all\n\ 1100 \n\ 1101 \032 How to sync (text interface (CLI) only):\n\ 1102 \032 -auto automatically accept default (nonconflicting) actions\n\ 1103 \032 -silent print nothing except error messages\n\ 1104 \032 -terse suppress status messages\n\ 1105 \n\ 1106 \032 Text interface (CLI):\n\ 1107 \032 -i interactive profile mode (text UI); command-line only\n\ 1108 \n\ 1109 Advanced options:\n\ 1110 \n\ 1111 \032 Fine-tune sync:\n\ 1112 \032 -acl synchronize ACLs\n\ 1113 \032 -atomic xxx add a pattern to the atomic list\n\ 1114 \032 -follow xxx add a pattern to the follow list\n\ 1115 \032 -force xxx force changes from this replica to the other\n\ 1116 \032 -forcepartial xxx add a pattern to the forcepartial list\n\ 1117 \032 -ignorecase xxx identify upper/lowercase filenames (true/false/default)\n\ 1118 \032 -immutable xxx add a pattern to the immutable list\n\ 1119 \032 -immutablenot xxx add a pattern to the immutablenot list\n\ 1120 \032 -links xxx allow the synchronization of symbolic links\n\ 1121 \032 (true/false/default)\n\ 1122 \032 -merge xxx add a pattern to the merge list\n\ 1123 \032 -nocreationpartial xxx add a pattern to the nocreationpartial list\n\ 1124 \032 -nodeletionpartial xxx add a pattern to the nodeletionpartial list\n\ 1125 \032 -noupdatepartial xxx add a pattern to the noupdatepartial list\n\ 1126 \032 -prefer xxx choose this replica's version for conflicting changes\n\ 1127 \032 -preferpartial xxx add a pattern to the preferpartial list\n\ 1128 \032 -rsrc xxx synchronize resource forks (true/false/default)\n\ 1129 \032 -xattrignore xxx add a pattern to the xattrignore list\n\ 1130 \032 -xattrignorenot xxx add a pattern to the xattrignorenot list\n\ 1131 \032 -xattrs synchronize extended attributes (xattrs)\n\ 1132 \n\ 1133 \032 How to sync:\n\ 1134 \032 -backup xxx add a pattern to the backup list\n\ 1135 \032 -backupcurr xxx add a pattern to the backupcurr list\n\ 1136 \032 -backupcurrnot xxx add a pattern to the backupcurrnot list\n\ 1137 \032 -backupdir xxx directory for storing centralized backups\n\ 1138 \032 -backuploc xxx where backups are stored ('local' or 'central')\n\ 1139 \032 -backupnot xxx add a pattern to the backupnot list\n\ 1140 \032 -backupprefix xxx prefix for the names of backup files\n\ 1141 \032 -backups (deprecated) keep backup copies of all files (see also\n\ 1142 \032 'backup')\n\ 1143 \032 -backupsuffix xxx a suffix to be added to names of backup files\n\ 1144 \032 -confirmbigdel ask about whole-replica (or path) deletes (default true)\n\ 1145 \032 -confirmmerge ask for confirmation before committing results of a merge\n\ 1146 \032 -copyonconflict keep copies of conflicting files\n\ 1147 \032 -dontchmod when set, never use the chmod system call\n\ 1148 \032 -fastcheck xxx do fast update detection (true/false/default)\n\ 1149 \032 -fat use appropriate options for FAT filesystems\n\ 1150 \032 -ignoreinodenumbers ignore inode number changes when detecting updates\n\ 1151 \032 -maxbackups n number of backed up versions of a file\n\ 1152 \032 -numericids don't map uid/gid values by user/group names\n\ 1153 \032 -sortbysize list changed files by size, not name\n\ 1154 \032 -sortfirst xxx add a pattern to the sortfirst list\n\ 1155 \032 -sortlast xxx add a pattern to the sortlast list\n\ 1156 \032 -sortnewfirst list new before changed files\n\ 1157 \n\ 1158 \032 How to sync (text interface (CLI) only):\n\ 1159 \032 -repeat xxx synchronize repeatedly (text interface only)\n\ 1160 \032 -retry n re-try failed synchronizations N times (text ui only)\n\ 1161 \n\ 1162 \032 Text interface (CLI):\n\ 1163 \032 -color xxx use color output for text UI (true/false/default)\n\ 1164 \032 -dumbtty do not change terminal settings in text UI\n\ 1165 \n\ 1166 \032 Graphical interface (GUI):\n\ 1167 \032 -height n height (in lines) of main window in graphical interface\n\ 1168 \n\ 1169 \032 Remote connections:\n\ 1170 \032 -addversionno add version number to name of unison on server\n\ 1171 \032 -clientHostName xxx set host name of client\n\ 1172 \032 -halfduplex (deprecated) force half-duplex communication with the\n\ 1173 \032 server\n\ 1174 \032 -killserver kill server when done (even when using sockets)\n\ 1175 \032 -listen xxx listen on this name or addr in server socket mode (can\n\ 1176 \032 repeat)\n\ 1177 \032 -rsync activate the rsync transfer mode (default true)\n\ 1178 \032 -servercmd xxx name of unison executable on remote server\n\ 1179 \032 -socket xxx act as a server on a socket\n\ 1180 \032 -sshargs xxx other arguments (if any) for remote shell command\n\ 1181 \032 -sshcmd xxx path to the ssh executable\n\ 1182 \032 -stream (deprecated) use a streaming protocol for transferring\n\ 1183 \032 file contents (default true)\n\ 1184 \032 -testserver exit immediately after the connection to the server\n\ 1185 \032 -xferbycopying optimize transfers using local copies (default true)\n\ 1186 \n\ 1187 \032 Archive management:\n\ 1188 \032 -ignorearchives ignore existing archive files\n\ 1189 \n\ 1190 \032 Other:\n\ 1191 \032 -addprefsto xxx file to add new prefs to\n\ 1192 \032 -contactquietly suppress the 'contacting server' message during startup\n\ 1193 \032 -copymax n (deprecated) maximum number of simultaneous copyprog\n\ 1194 \032 transfers\n\ 1195 \032 -copyprog xxx (deprecated) external program for copying large files\n\ 1196 \032 -copyprogrest xxx (deprecated) variant of copyprog for resuming partial\n\ 1197 \032 transfers\n\ 1198 \032 -copythreshold n (deprecated) use copyprog on files bigger than this (if\n\ 1199 \032 >=0, in Kb)\n\ 1200 \032 -diff xxx set command for showing differences between files\n\ 1201 \032 -ignorelocks ignore locks left over from previous run (dangerous!)\n\ 1202 \032 -include xxx include a profile's preferences\n\ 1203 \032 -key xxx define a keyboard shortcut for this profile (in some UIs)\n\ 1204 \032 -label xxx provide a descriptive string label for this profile\n\ 1205 \032 -log record actions in logfile (default true)\n\ 1206 \032 -logfile xxx logfile name\n\ 1207 \032 -maxerrors n maximum number of errors before a directory transfer is\n\ 1208 \032 aborted\n\ 1209 \032 -maxsizethreshold n prevent transfer of files bigger than this (if >=0, in\n\ 1210 \032 Kb)\n\ 1211 \032 -maxthreads n maximum number of simultaneous file transfers\n\ 1212 \032 -mountpoint xxx abort if this path does not exist\n\ 1213 \032 -rootalias xxx register alias for canonical root names\n\ 1214 \032 -showarchive show 'true names' (for rootalias) of roots and archive\n\ 1215 \032 -source xxx include a file's preferences\n\ 1216 \032 -ui xxx select UI ('text' or 'graphic'); command-line only\n\ 1217 \032 -unicode xxx assume Unicode encoding in case insensitive mode\n\ 1218 \032 -watch when set, use a file watcher process to detect changes\n\ 1219 \n\ 1220 Expert options:\n\ 1221 \032 -debug xxx debug module xxx ('all' -> everything, 'verbose' -> more)\n\ 1222 \032 -dumparchives dump contents of archives just after loading\n\ 1223 \032 -fastercheckUNSAFE skip computing fingerprints for new files (experts only!)\n\ 1224 \032 -selftest run internal tests and exit\n\ 1225 \n\ 1226 \n\ 1227 \032 Here, in more detail, is what they do. Many are discussed in greater\n\ 1228 \032 detail in other sections of the manual.\n\ 1229 \n\ 1230 \032 It should be noted that some command-line arguments are handled\n\ 1231 \032 specially during startup, including -doc, -help, -version, -socket, and\n\ 1232 \032 -ui. They are expected to appear on the command-line only, not in a\n\ 1233 \032 profile. In particular, -version and -doc will print to the standard\n\ 1234 \032 output, so they only make sense if invoked from the command-line (and\n\ 1235 \032 not a click-launched gui that has no standard output). Furthermore, the\n\ 1236 \032 actions associated with these command-line arguments are executed\n\ 1237 \032 without loading a profile or doing the usual command-line parsing.\n\ 1238 \n\ 1239 \032 acl\n\ 1240 \032 When this flag is set to true, the ACLs of files and directories\n\ 1241 \032 are synchronized. The type of ACLs depends on the platform and\n\ 1242 \032 filesystem support. On Unix-like platforms it can be NFSv4 ACLs,\n\ 1243 \032 for example.\n\ 1244 \n\ 1245 \032 addprefsto xxx\n\ 1246 \032 By default, new preferences added by Unison (e.g., new ignore\n\ 1247 \032 clauses) will be appended to whatever preference file Unison was\n\ 1248 \032 told to load at the beginning of the run. Setting the preference\n\ 1249 \032 addprefsto filename makes Unison add new preferences to the file\n\ 1250 \032 named filename instead.\n\ 1251 \n\ 1252 \032 addversionno\n\ 1253 \032 When this flag is set to true, Unison will use\n\ 1254 \032 unison-currentmajorversionnumber instead of just unison as the\n\ 1255 \032 remote server command (note that the minor version number is\n\ 1256 \032 dropped \226\128\147 e.g., unison-2.51). This allows multiple binaries for\n\ 1257 \032 different versions of unison to coexist conveniently on the same\n\ 1258 \032 server: whichever version is run on the client, the same version\n\ 1259 \032 will be selected on the server.\n\ 1260 \n\ 1261 \032 atomic xxx\n\ 1262 \032 This preference specifies paths for directories whose contents\n\ 1263 \032 will be considered as a group rather than individually when they\n\ 1264 \032 are both modified. The backups are also made atomically in this\n\ 1265 \032 case. The option backupcurr however has no effect on atomic\n\ 1266 \032 directories.\n\ 1267 \n\ 1268 \032 auto\n\ 1269 \032 When set to true, this flag causes the user interface to skip\n\ 1270 \032 asking for confirmations on non-conflicting changes. (More\n\ 1271 \032 precisely, when the user interface is done setting the\n\ 1272 \032 propagation direction for one entry and is about to move to the\n\ 1273 \032 next, it will skip over all non-conflicting entries and go\n\ 1274 \032 directly to the next conflict.)\n\ 1275 \n\ 1276 \032 backup xxx\n\ 1277 \032 Including the preference -backup pathspec causes Unison to keep\n\ 1278 \032 backup files for each path that matches pathspec; directories\n\ 1279 \032 (nor their permissions or any other metadata) are not backed up.\n\ 1280 \032 These backup files are kept in the directory specified by the\n\ 1281 \032 backuplocation preference. The backups are named according to\n\ 1282 \032 the backupprefix and backupsuffix preferences. The number of\n\ 1283 \032 versions that are kept is determined by the maxbackups\n\ 1284 \032 preference.\n\ 1285 \n\ 1286 \032 The syntax of pathspec is described in the section \226\128\156Path\n\ 1287 \032 Specification\226\128\157 .\n\ 1288 \n\ 1289 \032 backupcurr xxx\n\ 1290 \032 Including the preference -backupcurr pathspec causes Unison to\n\ 1291 \032 keep a backup of the current version of every file matching\n\ 1292 \032 pathspec. This file will be saved as a backup with version\n\ 1293 \032 number 000. Such backups can be used as inputs to external\n\ 1294 \032 merging programs, for instance. See the documentation for the\n\ 1295 \032 merge preference. For more details, see the section \226\128\156Merging\n\ 1296 \032 Conflicting Versions\226\128\157 .\n\ 1297 \n\ 1298 \032 The syntax of pathspec is described in the section \226\128\156Path\n\ 1299 \032 Specification\226\128\157 .\n\ 1300 \n\ 1301 \032 backupcurrnot xxx\n\ 1302 \032 Exceptions to backupcurr, like the ignorenot preference.\n\ 1303 \n\ 1304 \032 backupdir xxx\n\ 1305 \032 If this preference is set, Unison will use it as the name of the\n\ 1306 \032 directory used to store backup files specified by the backup\n\ 1307 \032 preference, when backuplocation is set to central. It is checked\n\ 1308 \032 after the UNISONBACKUPDIR environment variable.\n\ 1309 \n\ 1310 \032 backuploc xxx\n\ 1311 \032 This preference determines whether backups should be kept\n\ 1312 \032 locally, near the original files, or in a central directory\n\ 1313 \032 specified by the backupdir preference. If set to local, backups\n\ 1314 \032 will be kept in the same directory as the original files, and if\n\ 1315 \032 set to central, backupdir will be used instead.\n\ 1316 \n\ 1317 \032 backupnot xxx\n\ 1318 \032 The values of this preference specify paths or individual files\n\ 1319 \032 or regular expressions that should not be backed up, even if the\n\ 1320 \032 backup preference selects them\226\128\148i.e., it selectively overrides\n\ 1321 \032 backup.\n\ 1322 \n\ 1323 \032 backupprefix xxx\n\ 1324 \032 When a backup for a file NAME is created, it is stored in a\n\ 1325 \032 directory specified by backuplocation, in a file called\n\ 1326 \032 backupprefixNAMEbackupsuffix. backupprefix can include a\n\ 1327 \032 directory name (causing Unison to keep all backup files for a\n\ 1328 \032 given directory in a subdirectory with this name), and both\n\ 1329 \032 backupprefix and backupsuffix can contain the string $VERSION,\n\ 1330 \032 which will be replaced by the age of the backup (1 for the most\n\ 1331 \032 recent, 2 for the second most recent, and so on...). This\n\ 1332 \032 keyword is ignored if it appears in a directory name in the\n\ 1333 \032 prefix; if it does not appear anywhere in the prefix or the\n\ 1334 \032 suffix, it will be automatically placed at the beginning of the\n\ 1335 \032 suffix.\n\ 1336 \n\ 1337 \032 One thing to be careful of: If the backuploc preference is set\n\ 1338 \032 to local, Unison will automatically ignore all files whose\n\ 1339 \032 prefix and suffix match backupprefix and backupsuffix. So be\n\ 1340 \032 careful to choose values for these preferences that are\n\ 1341 \032 sufficiently different from the names of your real files.\n\ 1342 \n\ 1343 \032 backups\n\ 1344 \032 (Deprecated) Setting this flag to true is equivalent to setting\n\ 1345 \032 backuplocation to local and backup to Name *.\n\ 1346 \n\ 1347 \032 backupsuffix xxx\n\ 1348 \032 See backupprefix for full documentation.\n\ 1349 \n\ 1350 \032 batch\n\ 1351 \032 When this is set to true, the user interface will ask no\n\ 1352 \032 questions at all. Non-conflicting changes will be propagated;\n\ 1353 \032 conflicts will be skipped.\n\ 1354 \n\ 1355 \032 clientHostName xxx\n\ 1356 \032 When specified, the host name of the client will not be guessed\n\ 1357 \032 and the provided host name will be used to find the archive.\n\ 1358 \n\ 1359 \032 color xxx\n\ 1360 \032 When set to true, this flag enables color output in text mode\n\ 1361 \032 user interface. When set to false, all color output is disabled.\n\ 1362 \032 Default is to enable color if the NO_COLOR environment variable\n\ 1363 \032 is not set.\n\ 1364 \n\ 1365 \032 confirmbigdel\n\ 1366 \032 When this is set to true, Unison will request an extra\n\ 1367 \032 confirmation if it appears that the entire replica has been\n\ 1368 \032 deleted, before propagating the change. If the batch flag is\n\ 1369 \032 also set, synchronization will be aborted. When the path\n\ 1370 \032 preference is used, the same confirmation will be requested for\n\ 1371 \032 top-level paths. (At the moment, this flag only affects the text\n\ 1372 \032 user interface.) See also the mountpoint preference.\n\ 1373 \n\ 1374 \032 confirmmerge\n\ 1375 \032 Setting this preference causes both the text and graphical\n\ 1376 \032 interfaces to ask the user if the results of a merge command may\n\ 1377 \032 be committed to the replica or not. Since the merge command\n\ 1378 \032 works on temporary files, the user can then cancel all the\n\ 1379 \032 effects of applying the merge if it turns out that the result is\n\ 1380 \032 not satisfactory. In batch-mode, this preference has no effect.\n\ 1381 \032 Default is false.\n\ 1382 \n\ 1383 \032 contactquietly\n\ 1384 \032 If this flag is set, Unison will skip displaying the \226\128\152Contacting\n\ 1385 \032 server\226\128\153 message (which some users find annoying) during startup.\n\ 1386 \n\ 1387 \032 copymax n\n\ 1388 \032 (Deprecated) A number indicating how many instances of the\n\ 1389 \032 external copying utility Unison is allowed to run simultaneously\n\ 1390 \032 (default to 1).\n\ 1391 \n\ 1392 \032 copyonconflict\n\ 1393 \032 When this flag is set, Unison will make a copy of files that\n\ 1394 \032 would otherwise be overwritten or deleted in case of conflicting\n\ 1395 \032 changes, and more generally whenever the default behavior is\n\ 1396 \032 overridden. This makes it possible to automatically resolve\n\ 1397 \032 conflicts in a fairly safe way when synchronizing continuously,\n\ 1398 \032 in combination with the -repeat watch and -prefer newer\n\ 1399 \032 preferences.\n\ 1400 \n\ 1401 \032 copyprog xxx\n\ 1402 \032 (Deprecated) A string giving the name of an external program\n\ 1403 \032 that can be used to copy large files efficiently (plus\n\ 1404 \032 command-line switches telling it to copy files in-place). The\n\ 1405 \032 default setting invokes rsync with appropriate options\226\128\148most\n\ 1406 \032 users should not need to change it.\n\ 1407 \n\ 1408 \032 copyprogrest xxx\n\ 1409 \032 (Deprecated) A variant of copyprog that names an external\n\ 1410 \032 program that should be used to continue the transfer of a large\n\ 1411 \032 file that has already been partially transferred. Typically,\n\ 1412 \032 copyprogrest will just be copyprog with one extra option (e.g.,\n\ 1413 \032 --partial, for rsync). The default setting invokes rsync with\n\ 1414 \032 appropriate options\226\128\148most users should not need to change it.\n\ 1415 \n\ 1416 \032 copythreshold n\n\ 1417 \032 (Deprecated) A number indicating above what filesize (in\n\ 1418 \032 kilobytes) Unison should use the external copying utility\n\ 1419 \032 specified by copyprog. Specifying 0 will cause all copies to use\n\ 1420 \032 the external program; a negative number will prevent any files\n\ 1421 \032 from using it. The default is -1. See the section \226\128\156Making Unison\n\ 1422 \032 Faster on Large Files\226\128\157 for more information.\n\ 1423 \n\ 1424 \032 debug xxx\n\ 1425 \032 This preference is used to make Unison print various sorts of\n\ 1426 \032 information about what it is doing internally on the standard\n\ 1427 \032 error stream. It can be used many times, each time with the name\n\ 1428 \032 of a module for which debugging information should be printed.\n\ 1429 \032 Possible arguments for debug can be found by looking for calls\n\ 1430 \032 to Util.debug in the sources (using, e.g., grep). Setting -debug\n\ 1431 \032 all causes information from all modules to be printed (this mode\n\ 1432 \032 of usage is the first one to try, if you are trying to\n\ 1433 \032 understand something that Unison seems to be doing wrong);\n\ 1434 \032 -debug verbose turns on some additional debugging output from\n\ 1435 \032 some modules (e.g., it will show exactly what bytes are being\n\ 1436 \032 sent across the network).\n\ 1437 \n\ 1438 \032 diff xxx\n\ 1439 \032 This preference can be used to control the name and command-line\n\ 1440 \032 arguments of the system utility used to generate displays of\n\ 1441 \032 file differences. The default is \226\128\152diff -u OLDER NEWER\226\128\153. If the\n\ 1442 \032 value of this preference contains the substrings CURRENT1 and\n\ 1443 \032 CURRENT2, these will be replaced by the names of the files to be\n\ 1444 \032 diffed. If the value of this preference contains the substrings\n\ 1445 \032 NEWER and OLDER, these will be replaced by the names of files to\n\ 1446 \032 be diffed, NEWER being the most recently modified file of the\n\ 1447 \032 two. Without any of these substrings, the two filenames will be\n\ 1448 \032 appended to the command. In all cases, the filenames are\n\ 1449 \032 suitably quoted.\n\ 1450 \n\ 1451 \032 doc xxx\n\ 1452 \032 The command-line argument -doc secname causes unison to display\n\ 1453 \032 section secname of the manual on the standard output and then\n\ 1454 \032 exit. Use -doc all to display the whole manual, which includes\n\ 1455 \032 exactly the same information as the printed and HTML manuals,\n\ 1456 \032 modulo formatting. Use -doc topics to obtain a list of the names\n\ 1457 \032 of the various sections that can be printed.\n\ 1458 \n\ 1459 \032 dontchmod\n\ 1460 \032 By default, Unison uses the \226\128\153chmod\226\128\153 system call to set the\n\ 1461 \032 permission bits of files after it has copied them. But in some\n\ 1462 \032 circumstances (and under some operating systems), the chmod call\n\ 1463 \032 always fails. Setting this preference completely prevents Unison\n\ 1464 \032 from ever calling chmod.\n\ 1465 \n\ 1466 \032 dumbtty\n\ 1467 \032 When set to true, this flag makes the text mode user interface\n\ 1468 \032 avoid trying to change any of the terminal settings. (Normally,\n\ 1469 \032 Unison puts the terminal in \226\128\152raw mode\226\128\153, so that it can do things\n\ 1470 \032 like overwriting the current line.) This is useful, for example,\n\ 1471 \032 when Unison runs in a shell inside of Emacs.\n\ 1472 \n\ 1473 \032 When dumbtty is set, commands to the user interface need to be\n\ 1474 \032 followed by a carriage return before Unison will execute them.\n\ 1475 \032 (When it is off, Unison recognizes keystrokes as soon as they\n\ 1476 \032 are typed.)\n\ 1477 \n\ 1478 \032 This preference has no effect on the graphical user interface.\n\ 1479 \n\ 1480 \032 dumparchives\n\ 1481 \032 When this preference is set, Unison will create a file\n\ 1482 \032 unison.dump on each host, containing a text summary of the\n\ 1483 \032 archive, immediately after loading it.\n\ 1484 \n\ 1485 \032 fastcheck xxx\n\ 1486 \032 When this preference is set to true, Unison will use the\n\ 1487 \032 modification time and length of a file as a \226\128\152pseudo inode\n\ 1488 \032 number\226\128\153 when scanning replicas for updates, instead of reading\n\ 1489 \032 the full contents of every file. (This does not apply to the\n\ 1490 \032 very first run, when Unison will always scan all files\n\ 1491 \032 regardless of this switch). Under Windows, this may cause Unison\n\ 1492 \032 to miss propagating an update if the modification time and\n\ 1493 \032 length of the file are both unchanged by the update. However,\n\ 1494 \032 Unison will never overwrite such an update with a change from\n\ 1495 \032 the other replica, since it always does a safe check for updates\n\ 1496 \032 just before propagating a change. Thus, it is reasonable to use\n\ 1497 \032 this switch under Windows most of the time and occasionally run\n\ 1498 \032 Unison once with fastcheck set to false, if you are worried that\n\ 1499 \032 Unison may have overlooked an update. For backward\n\ 1500 \032 compatibility, yes, no, and default can be used in place of\n\ 1501 \032 true, false, and auto. See the section \226\128\156Fast Update Detection\226\128\157\n\ 1502 \032 for more information.\n\ 1503 \n\ 1504 \032 fastercheckUNSAFE\n\ 1505 \032 THIS FEATURE IS STILL EXPERIMENTAL AND SHOULD BE USED WITH\n\ 1506 \032 EXTREME CAUTION.\n\ 1507 \n\ 1508 \032 When this flag is set to true, Unison will compute a\n\ 1509 \032 \226\128\153pseudo-fingerprint\226\128\153 the first time it sees a file (either\n\ 1510 \032 because the file is new or because Unison is running for the\n\ 1511 \032 first time). This enormously speeds update detection, but it\n\ 1512 \032 must be used with care, as it can cause Unison to miss\n\ 1513 \032 conflicts: If a given path in the filesystem contains files on\n\ 1514 \032 both sides that Unison has not yet seen, and if those files have\n\ 1515 \032 the same length but different contents, then Unison will not\n\ 1516 \032 notice the presence of a conflict. If, later, one of the files\n\ 1517 \032 is changed, the changed file will be propagated, overwriting the\n\ 1518 \032 other.\n\ 1519 \n\ 1520 \032 Moreover, even when the files are initially identical, setting\n\ 1521 \032 this flag can lead to potentially confusing behavior: if a newly\n\ 1522 \032 created file is later touched without being modified, Unison\n\ 1523 \032 will treat this conservatively as a potential change (since it\n\ 1524 \032 has no record of the earlier contents) and show it as needing to\n\ 1525 \032 be propagated to the other replica.\n\ 1526 \n\ 1527 \032 Most users should leave this flag off \226\128\147 the small time savings\n\ 1528 \032 of not fingerprinting new files is not worth the cost in terms\n\ 1529 \032 of safety. However, it can be very useful for power users with\n\ 1530 \032 huge replicas that are known to be already synchronized (e.g.,\n\ 1531 \032 because one replica is a newly created duplicate of the other,\n\ 1532 \032 or because they have previously been synchronized with Unison\n\ 1533 \032 but Unison\226\128\153s archives need to be rebuilt). In such situations,\n\ 1534 \032 it is recommended that this flag be set only for the initial run\n\ 1535 \032 of Unison, so that new archives can be created quickly, and then\n\ 1536 \032 turned off for normal use.\n\ 1537 \n\ 1538 \032 fat\n\ 1539 \032 When this is set to true, Unison will use appropriate options to\n\ 1540 \032 synchronize efficiently and without error a replica located on a\n\ 1541 \032 FAT filesystem on a non-Windows machine: do not synchronize\n\ 1542 \032 permissions (perms = 0); never use chmod (dontchmod = true);\n\ 1543 \032 treat filenames as case insensitive (ignorecase = true); do not\n\ 1544 \032 attempt to synchronize symbolic links (links = false); ignore\n\ 1545 \032 inode number changes when detecting updates (ignoreinodenumbers\n\ 1546 \032 = true). Any of these change can be overridden by explicitly\n\ 1547 \032 setting the corresponding preference in the profile.\n\ 1548 \n\ 1549 \032 follow xxx\n\ 1550 \032 Including the preference -follow pathspec causes Unison to treat\n\ 1551 \032 symbolic links matching pathspec as \226\128\152invisible\226\128\153 and behave as if\n\ 1552 \032 the object pointed to by the link had appeared literally at this\n\ 1553 \032 position in the replica. See the section \226\128\156Symbolic Links\226\128\157 for\n\ 1554 \032 more details. The syntax of pathspec is described in the section\n\ 1555 \032 \226\128\156Path Specification\226\128\157 .\n\ 1556 \n\ 1557 \032 force xxx\n\ 1558 \032 Including the preference -force root causes Unison to resolve\n\ 1559 \032 all differences (even non-conflicting changes) in favor of root.\n\ 1560 \032 This effectively changes Unison from a synchronizer into a\n\ 1561 \032 mirroring utility.\n\ 1562 \n\ 1563 \032 You can also specify a unique prefix or suffix of the path of\n\ 1564 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1565 \032 root.\n\ 1566 \n\ 1567 \032 You can also specify -force newer (or -force older) to force\n\ 1568 \032 Unison to choose the file with the later (earlier) modtime. In\n\ 1569 \032 this case, the -times preference must also be enabled. If\n\ 1570 \032 modtimes are equal in both replicas when using newer or older\n\ 1571 \032 then this preference will have no effect (changes will be synced\n\ 1572 \032 as if without this preference or remain unsynced in case of a\n\ 1573 \032 conflict).\n\ 1574 \n\ 1575 \032 This preference is overridden by the forcepartial preference.\n\ 1576 \n\ 1577 \032 This preference should be used only if you are sure you know\n\ 1578 \032 what you are doing!\n\ 1579 \n\ 1580 \032 forcepartial xxx\n\ 1581 \032 Including the preference forcepartial = PATHSPEC -> root causes\n\ 1582 \032 Unison to resolve all differences (even non-conflicting changes)\n\ 1583 \032 in favor of root for the files in PATHSPEC (see the section\n\ 1584 \032 \226\128\156Path Specification\226\128\157 for more information). This effectively\n\ 1585 \032 changes Unison from a synchronizer into a mirroring utility.\n\ 1586 \n\ 1587 \032 You can also specify a unique prefix or suffix of the path of\n\ 1588 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1589 \032 root.\n\ 1590 \n\ 1591 \032 You can also specify forcepartial PATHSPEC -> newer (or\n\ 1592 \032 forcepartial PATHSPEC -> older) to force Unison to choose the\n\ 1593 \032 file with the later (earlier) modtime. In this case, the -times\n\ 1594 \032 preference must also be enabled. If modtimes are equal in both\n\ 1595 \032 replicas when using newer or older then this preference will\n\ 1596 \032 have no effect (changes will be synced as if without this\n\ 1597 \032 preference or remain unsynced in case of a conflict).\n\ 1598 \n\ 1599 \032 This preference should be used only if you are sure you know\n\ 1600 \032 what you are doing!\n\ 1601 \n\ 1602 \032 group\n\ 1603 \032 When this flag is set to true, the group attributes of the files\n\ 1604 \032 are synchronized. Whether the group names or the group\n\ 1605 \032 identifiers are synchronized depends on the preference numerids.\n\ 1606 \n\ 1607 \032 halfduplex\n\ 1608 \032 (Deprecated) When this flag is set to true, Unison network\n\ 1609 \032 communication is forced to be half duplex (the client and the\n\ 1610 \032 server never simultaneously emit data). If you experience\n\ 1611 \032 unstabilities with your network link, this may help.\n\ 1612 \n\ 1613 \032 height n\n\ 1614 \032 Used to set the height (in lines) of the main window in the\n\ 1615 \032 graphical user interface.\n\ 1616 \n\ 1617 \032 i\n\ 1618 \032 Provide this preference in the command line arguments to enable\n\ 1619 \032 interactive profile manager in the text user interface.\n\ 1620 \032 Currently only profile listing and interactive selection are\n\ 1621 \032 available. Preferences like batch and silent remain applicable\n\ 1622 \032 to synchronization functionality.\n\ 1623 \n\ 1624 \032 ignore xxx\n\ 1625 \032 Including the preference -ignore pathspec causes Unison to\n\ 1626 \032 completely ignore paths that match pathspec (as well as their\n\ 1627 \032 children). This is useful for avoiding synchronizing temporary\n\ 1628 \032 files, object files, etc. The syntax of pathspec is described in\n\ 1629 \032 the section \226\128\156Path Specification\226\128\157 , and further details on\n\ 1630 \032 ignoring paths is found in the section \226\128\156Ignoring Paths\226\128\157 .\n\ 1631 \n\ 1632 \032 ignorearchives\n\ 1633 \032 When this preference is set, Unison will ignore any existing\n\ 1634 \032 archive files and behave as though it were being run for the\n\ 1635 \032 first time on these replicas. It is not a good idea to set this\n\ 1636 \032 option in a profile: it is intended for command-line use.\n\ 1637 \n\ 1638 \032 ignorecase xxx\n\ 1639 \032 When set to true, this flag causes Unison to treat filenames as\n\ 1640 \032 case insensitive\226\128\148i.e., files in the two replicas whose names\n\ 1641 \032 differ in (upper- and lower-case) \226\128\152spelling\226\128\153 are treated as the\n\ 1642 \032 same file. When the flag is set to false, Unison will treat all\n\ 1643 \032 filenames as case sensitive. Ordinarily, when the flag is set to\n\ 1644 \032 default, filenames are automatically taken to be\n\ 1645 \032 case-insensitive if either host is running Windows or OSX. In\n\ 1646 \032 rare circumstances it may be useful to set the flag manually.\n\ 1647 \n\ 1648 \032 ignoreinodenumbers\n\ 1649 \032 When set to true, this preference makes Unison not take\n\ 1650 \032 advantage of inode numbers during fast update detection. This\n\ 1651 \032 switch should be used with care, as it is less safe than the\n\ 1652 \032 standard update detection method, but it can be useful with\n\ 1653 \032 filesystems which do not support inode numbers.\n\ 1654 \n\ 1655 \032 ignorelocks\n\ 1656 \032 When this preference is set, Unison will ignore any lock files\n\ 1657 \032 that may have been left over from a previous run of Unison that\n\ 1658 \032 was interrupted while reading or writing archive files; by\n\ 1659 \032 default, when Unison sees these lock files it will stop and\n\ 1660 \032 request manual intervention. This option should be set only if\n\ 1661 \032 you are positive that no other instance of Unison might be\n\ 1662 \032 concurrently accessing the same archive files (e.g., because\n\ 1663 \032 there was only one instance of unison running and it has just\n\ 1664 \032 crashed or you have just killed it). It is probably not a good\n\ 1665 \032 idea to set this option in a profile: it is intended for\n\ 1666 \032 command-line use.\n\ 1667 \n\ 1668 \032 ignorenot xxx\n\ 1669 \032 This preference overrides the preference ignore. It gives a list\n\ 1670 \032 of patterns (in the same format as ignore) for paths that should\n\ 1671 \032 definitely not be ignored, whether or not they happen to match\n\ 1672 \032 one of the ignore patterns.\n\ 1673 \n\ 1674 \032 Note that the semantics of ignore and ignorenot is a little\n\ 1675 \032 counter-intuitive. When detecting updates, Unison examines paths\n\ 1676 \032 in depth-first order, starting from the roots of the replicas\n\ 1677 \032 and working downwards. Before examining each path, it checks\n\ 1678 \032 whether it matches ignore and does not match ignorenot; in this\n\ 1679 \032 case it skips this path and all its descendants. This means\n\ 1680 \032 that, if some parent of a given path matches an ignore pattern,\n\ 1681 \032 then it will be skipped even if the path itself matches an\n\ 1682 \032 ignorenot pattern. In particular, putting ignore = Path * in\n\ 1683 \032 your profile and then using ignorenot to select particular paths\n\ 1684 \032 to be synchronized will not work. Instead, you should use the\n\ 1685 \032 path preference to choose particular paths to synchronize.\n\ 1686 \n\ 1687 \032 immutable xxx\n\ 1688 \032 This preference specifies paths for directories whose immediate\n\ 1689 \032 children are all immutable files \226\128\148 i.e., once a file has been\n\ 1690 \032 created, its contents never changes. When scanning for updates,\n\ 1691 \032 Unison does not check whether these files have been modified;\n\ 1692 \032 this can speed update detection significantly (in particular,\n\ 1693 \032 for mail directories).\n\ 1694 \n\ 1695 \032 immutablenot xxx\n\ 1696 \032 This preference overrides immutable.\n\ 1697 \n\ 1698 \032 include xxx\n\ 1699 \032 Include preferences from a profile. include name reads the\n\ 1700 \032 profile \"name\" (or file \"name\" in the .unison directory if\n\ 1701 \032 profile \"name\" does not exist) and includes its contents as if\n\ 1702 \032 it was part of a profile or given directly on command line.\n\ 1703 \n\ 1704 \032 key xxx\n\ 1705 \032 Used in a profile to define a numeric key (0-9) that can be used\n\ 1706 \032 in the user interface to switch immediately to this profile.\n\ 1707 \n\ 1708 \032 killserver\n\ 1709 \032 When set to true, this flag causes Unison to kill the remote\n\ 1710 \032 server process when the synchronization is finished. This\n\ 1711 \032 behavior is the default for ssh connections, so this preference\n\ 1712 \032 is not normally needed when running over ssh; it is provided so\n\ 1713 \032 that socket-mode servers can be killed off after a single run of\n\ 1714 \032 Unison, rather than waiting to accept future connections. (Some\n\ 1715 \032 users prefer to start a remote socket server for each run of\n\ 1716 \032 Unison, rather than leaving one running all the time.)\n\ 1717 \n\ 1718 \032 label xxx\n\ 1719 \032 Used in a profile to provide a descriptive string documenting\n\ 1720 \032 its settings. (This is useful for users that switch between\n\ 1721 \032 several profiles, especially using the \226\128\152fast switch\226\128\153 feature of\n\ 1722 \032 the graphical user interface.)\n\ 1723 \n\ 1724 \032 links xxx\n\ 1725 \032 When set to true, this flag causes Unison to synchronize\n\ 1726 \032 symbolic links. When the flag is set to false, symbolic links\n\ 1727 \032 will be ignored during update detection. Ordinarily, when the\n\ 1728 \032 flag is set to default, symbolic links are synchronized except\n\ 1729 \032 when one of the hosts is running Windows. On a Windows client,\n\ 1730 \032 Unison makes an attempt to detect if symbolic links are\n\ 1731 \032 supported and allowed by user privileges. You may have to get\n\ 1732 \032 elevated privileges to create symbolic links. When the flag is\n\ 1733 \032 set to default and symbolic links can\226\128\153t be synchronized then an\n\ 1734 \032 error is produced during update detection.\n\ 1735 \n\ 1736 \032 listen xxx\n\ 1737 \032 When acting as a server on a TCP socket, Unison will by default\n\ 1738 \032 listen on \"any\" address (0.0.0.0 and [::]). This command-line\n\ 1739 \032 argument allows to specify a different listening address and can\n\ 1740 \032 be repeated to listen on multiple addresses. Listening address\n\ 1741 \032 can be specified as a host name or an IP address.\n\ 1742 \n\ 1743 \032 log\n\ 1744 \032 When this flag is set, Unison will log all changes to the\n\ 1745 \032 filesystems on a file.\n\ 1746 \n\ 1747 \032 logfile xxx\n\ 1748 \032 By default, logging messages will be appended to the file\n\ 1749 \032 unison.log in your .unison directory. Set this preference if you\n\ 1750 \032 prefer another file. It can be a path relative to your .unison\n\ 1751 \032 directory. Sending SIGUSR1 will close the logfile; the logfile\n\ 1752 \032 will be re-opened (and created, if needed) automatically, to\n\ 1753 \032 allow for log rotation.\n\ 1754 \n\ 1755 \032 maxbackups n\n\ 1756 \032 This preference specifies the number of backup versions that\n\ 1757 \032 will be kept by unison, for each path that matches the predicate\n\ 1758 \032 backup. The default is 2.\n\ 1759 \n\ 1760 \032 maxerrors n\n\ 1761 \032 This preference controls after how many errors Unison aborts a\n\ 1762 \032 directory transfer. Setting it to a large number allows Unison\n\ 1763 \032 to transfer most of a directory even when some files fail to be\n\ 1764 \032 copied. The default is 1. If the preference is set too high,\n\ 1765 \032 Unison may take a long time to abort in case of repeated\n\ 1766 \032 failures (for instance, when the disk is full).\n\ 1767 \n\ 1768 \032 maxsizethreshold n\n\ 1769 \032 A number indicating above what filesize (in kilobytes) Unison\n\ 1770 \032 should flag a conflict instead of transferring the file. This\n\ 1771 \032 conflict remains even in the presence of force or prefer\n\ 1772 \032 options. A negative number will allow every transfer\n\ 1773 \032 independently of the size. The default is -1.\n\ 1774 \n\ 1775 \032 maxthreads n\n\ 1776 \032 This preference controls how much concurrency is allowed during\n\ 1777 \032 the transport phase. Normally, it should be set reasonably high\n\ 1778 \032 to maximize performance, but when Unison is used over a\n\ 1779 \032 low-bandwidth link it may be helpful to set it lower (e.g. to 1)\n\ 1780 \032 so that Unison doesn\226\128\153t soak up all the available bandwidth. The\n\ 1781 \032 default is the special value 0, which mean 20 threads when file\n\ 1782 \032 content streaming is deactivated and 1000 threads when it is\n\ 1783 \032 activated.\n\ 1784 \n\ 1785 \032 merge xxx\n\ 1786 \032 This preference can be used to run a merge program which will\n\ 1787 \032 create a new version for each of the files and the backup, with\n\ 1788 \032 the last backup and both replicas. The syntax of pathspec -> cmd\n\ 1789 \032 is described in the section \226\128\156Path Specification\226\128\157 , and further\n\ 1790 \032 details on Merging functions are present in the section \226\128\156Merging\n\ 1791 \032 Conflicting Versions\226\128\157 .\n\ 1792 \n\ 1793 \032 mountpoint xxx\n\ 1794 \032 Including the preference -mountpoint PATH causes Unison to\n\ 1795 \032 double-check, at the end of update detection, that PATH exists\n\ 1796 \032 and abort if it does not. This is useful when Unison is used to\n\ 1797 \032 synchronize removable media. This preference can be given more\n\ 1798 \032 than once. See the section \226\128\156Mount Points and Removable Media\226\128\157 .\n\ 1799 \n\ 1800 \032 nocreation xxx\n\ 1801 \032 Including the preference -nocreation root prevents Unison from\n\ 1802 \032 performing any file creation on root root.\n\ 1803 \n\ 1804 \032 You can also specify a unique prefix or suffix of the path of\n\ 1805 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1806 \032 root.\n\ 1807 \n\ 1808 \032 This preference can be included twice, once for each root, if\n\ 1809 \032 you want to prevent any creation.\n\ 1810 \n\ 1811 \032 nocreationpartial xxx\n\ 1812 \032 Including the preference nocreationpartial = PATHSPEC -> root\n\ 1813 \032 prevents Unison from performing any file creation in PATHSPEC on\n\ 1814 \032 root root (see the section \226\128\156Path Specification\226\128\157 for more\n\ 1815 \032 information). It is recommended to use BelowPath patterns when\n\ 1816 \032 selecting a directory and all its contents.\n\ 1817 \n\ 1818 \032 nodeletion xxx\n\ 1819 \032 Including the preference -nodeletion root prevents Unison from\n\ 1820 \032 performing any file deletion on root root.\n\ 1821 \n\ 1822 \032 You can also specify a unique prefix or suffix of the path of\n\ 1823 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1824 \032 root.\n\ 1825 \n\ 1826 \032 This preference can be included twice, once for each root, if\n\ 1827 \032 you want to prevent any deletion.\n\ 1828 \n\ 1829 \032 nodeletionpartial xxx\n\ 1830 \032 Including the preference nodeletionpartial = PATHSPEC -> root\n\ 1831 \032 prevents Unison from performing any file deletion in PATHSPEC on\n\ 1832 \032 root root (see the section \226\128\156Path Specification\226\128\157 for more\n\ 1833 \032 information). It is recommended to use BelowPath patterns when\n\ 1834 \032 selecting a directory and all its contents.\n\ 1835 \n\ 1836 \032 noupdate xxx\n\ 1837 \032 Including the preference -noupdate root prevents Unison from\n\ 1838 \032 performing any file update or deletion on root root.\n\ 1839 \n\ 1840 \032 You can also specify a unique prefix or suffix of the path of\n\ 1841 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1842 \032 root.\n\ 1843 \n\ 1844 \032 This preference can be included twice, once for each root, if\n\ 1845 \032 you want to prevent any update.\n\ 1846 \n\ 1847 \032 noupdatepartial xxx\n\ 1848 \032 Including the preference noupdatepartial = PATHSPEC -> root\n\ 1849 \032 prevents Unison from performing any file update or deletion in\n\ 1850 \032 PATHSPEC on root root (see the section \226\128\156Path Specification\226\128\157 for\n\ 1851 \032 more information). It is recommended to use BelowPath patterns\n\ 1852 \032 when selecting a directory and all its contents.\n\ 1853 \n\ 1854 \032 numericids\n\ 1855 \032 When this flag is set to true, groups and users are synchronized\n\ 1856 \032 numerically, rather than by name.\n\ 1857 \n\ 1858 \032 The special uid 0 and the special group 0 are never mapped via\n\ 1859 \032 user/group names even if this preference is not set.\n\ 1860 \n\ 1861 \032 owner\n\ 1862 \032 When this flag is set to true, the owner attributes of the files\n\ 1863 \032 are synchronized. Whether the owner names or the owner\n\ 1864 \032 identifiers are synchronizeddepends on the preference numerids.\n\ 1865 \n\ 1866 \032 path xxx\n\ 1867 \032 When no path preference is given, Unison will simply synchronize\n\ 1868 \032 the two entire replicas, beginning from the given pair of roots.\n\ 1869 \032 If one or more path preferences are given, then Unison will\n\ 1870 \032 synchronize only these paths and their children. (This is useful\n\ 1871 \032 for doing a fast sync of just one directory, for example.) Note\n\ 1872 \032 that path preferences are interpreted literally\226\128\148they are not\n\ 1873 \032 regular expressions.\n\ 1874 \n\ 1875 \032 perms n\n\ 1876 \032 The integer value of this preference is a mask indicating which\n\ 1877 \032 permission bits should be synchronized. It is set by default to\n\ 1878 \032 0o1777: all bits but the set-uid and set-gid bits are\n\ 1879 \032 synchronised (synchronizing these latter bits can be a security\n\ 1880 \032 hazard). If you want to synchronize all bits, you can set the\n\ 1881 \032 value of this preference to \226\136\1461. If one of the replica is on a\n\ 1882 \032 FAT [Windows] filesystem, you should consider using the fat\n\ 1883 \032 preference instead of this preference. If you need Unison not to\n\ 1884 \032 set permissions at all, set the value of this preference to 0\n\ 1885 \032 and set the preference dontchmod to true.\n\ 1886 \n\ 1887 \032 prefer xxx\n\ 1888 \032 Including the preference -prefer root causes Unison always to\n\ 1889 \032 resolve conflicts in favor of root, rather than asking for\n\ 1890 \032 guidance from the user, except for paths marked by the\n\ 1891 \032 preference merge. (The syntax of root is the same as for the\n\ 1892 \032 root preference, plus the special values newer and older.)\n\ 1893 \n\ 1894 \032 You can also specify a unique prefix or suffix of the path of\n\ 1895 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1896 \032 root.\n\ 1897 \n\ 1898 \032 This preference is overridden by the preferpartial preference.\n\ 1899 \n\ 1900 \032 This preference should be used only if you are sure you know\n\ 1901 \032 what you are doing!\n\ 1902 \n\ 1903 \032 preferpartial xxx\n\ 1904 \032 Including the preference preferpartial = PATHSPEC -> root causes\n\ 1905 \032 Unison always to resolve conflicts in favor of root, rather than\n\ 1906 \032 asking for guidance from the user, for the files in PATHSPEC\n\ 1907 \032 (see the section \226\128\156Path Specification\226\128\157 for more information).\n\ 1908 \032 (The syntax of root is the same as for the root preference, plus\n\ 1909 \032 the special values newer and older.)\n\ 1910 \n\ 1911 \032 You can also specify a unique prefix or suffix of the path of\n\ 1912 \032 one of the roots or a unique prefix of the hostname of a remote\n\ 1913 \032 root.\n\ 1914 \n\ 1915 \032 This preference should be used only if you are sure you know\n\ 1916 \032 what you are doing!\n\ 1917 \n\ 1918 \032 repeat xxx\n\ 1919 \032 Setting this preference causes the text-mode interface to\n\ 1920 \032 synchronize repeatedly, rather than doing it just once and\n\ 1921 \032 stopping. If the argument is a number, Unison will pause for\n\ 1922 \032 that many seconds before beginning again. When the argument is\n\ 1923 \032 watch, Unison relies on an external file monitoring process to\n\ 1924 \032 synchronize whenever a change happens. You can combine the two\n\ 1925 \032 with a + character to use file monitoring and also do a full\n\ 1926 \032 scan every specified number of seconds. For example, watch+3600\n\ 1927 \032 will react to changes immediately and additionally do a full\n\ 1928 \032 scan every hour.\n\ 1929 \n\ 1930 \032 retry n\n\ 1931 \032 Setting this preference causes the text-mode interface to try\n\ 1932 \032 again to synchronize updated paths where synchronization fails.\n\ 1933 \032 Each such path will be tried N times.\n\ 1934 \n\ 1935 \032 root xxx\n\ 1936 \032 Each use of this preference names the root of one of the\n\ 1937 \032 replicas for Unison to synchronize. Exactly two roots are\n\ 1938 \032 needed, so normal modes of usage are either to give two values\n\ 1939 \032 for root in the profile, or to give no values in the profile and\n\ 1940 \032 provide two on the command line. Details of the syntax of roots\n\ 1941 \032 can be found in the section \226\128\156Roots\226\128\157 .\n\ 1942 \n\ 1943 \032 The two roots can be given in either order; Unison will sort\n\ 1944 \032 them into a canonical order before doing anything else. It also\n\ 1945 \032 tries to \226\128\152canonize\226\128\153 the machine names and paths that appear in\n\ 1946 \032 the roots, so that, if Unison is invoked later with a slightly\n\ 1947 \032 different name for the same root, it will be able to locate the\n\ 1948 \032 correct archives.\n\ 1949 \n\ 1950 \032 rootalias xxx\n\ 1951 \032 When calculating the name of the archive files for a given pair\n\ 1952 \032 of roots, Unison replaces any roots matching the left-hand side\n\ 1953 \032 of any rootalias rule by the corresponding right-hand side.\n\ 1954 \n\ 1955 \032 rsrc xxx\n\ 1956 \032 When set to true, this flag causes Unison to synchronize\n\ 1957 \032 resource forks and HFS meta-data. On filesystems that do not\n\ 1958 \032 natively support resource forks, this data is stored in\n\ 1959 \032 Carbon-compatible ._ AppleDouble files. When the flag is set to\n\ 1960 \032 false, Unison will not synchronize these data. Ordinarily, the\n\ 1961 \032 flag is set to default, and these data are automatically\n\ 1962 \032 synchronized if either host is running OSX. In rare\n\ 1963 \032 circumstances it is useful to set the flag manually.\n\ 1964 \n\ 1965 \032 rsync\n\ 1966 \032 Unison uses the \226\128\153rsync algorithm\226\128\153 for \226\128\153diffs-only\226\128\153 transfer of\n\ 1967 \032 updates to large files. Setting this flag to false makes Unison\n\ 1968 \032 use whole-file transfers instead. Under normal circumstances,\n\ 1969 \032 there is no reason to do this, but if you are having trouble\n\ 1970 \032 with repeated \226\128\153rsync failure\226\128\153 errors, setting it to false should\n\ 1971 \032 permit you to synchronize the offending files.\n\ 1972 \n\ 1973 \032 selftest\n\ 1974 \032 Run internal tests and exit. This option is mostly for\n\ 1975 \032 developers and must be used carefully: in particular, it will\n\ 1976 \032 delete the contents of both roots, so that it can install its\n\ 1977 \032 own files for testing. This flag only makes sense on the command\n\ 1978 \032 line. When it is provided, no preference file is read: all\n\ 1979 \032 preferences must be specified on thecommand line. Also, since\n\ 1980 \032 the self-test procedure involves overwriting the roots and\n\ 1981 \032 backup directory, the names of the roots and of the backupdir\n\ 1982 \032 preference must include the string \"test\" or else the tests will\n\ 1983 \032 be aborted. (If these are not given on the command line, dummy\n\ 1984 \032 subdirectories in the current directory will be created\n\ 1985 \032 automatically.)\n\ 1986 \n\ 1987 \032 servercmd xxx\n\ 1988 \032 This preference can be used to explicitly set the name of the\n\ 1989 \032 Unison executable on the remote server (e.g., giving a full path\n\ 1990 \032 name), if necessary.\n\ 1991 \n\ 1992 \032 showarchive\n\ 1993 \032 When this preference is set, Unison will print out the \226\128\153true\n\ 1994 \032 names\226\128\153of the roots, in the same form as is expected by the\n\ 1995 \032 rootalias preference.\n\ 1996 \n\ 1997 \032 silent\n\ 1998 \032 When this preference is set to true, the textual user interface\n\ 1999 \032 will print nothing at all, except in the case of errors. Setting\n\ 2000 \032 silent to true automatically sets the batch preference to true.\n\ 2001 \n\ 2002 \032 socket xxx\n\ 2003 \032 Start unison as a server listening on a TCP socket (with TCP\n\ 2004 \032 port number as argument) or a local socket (aka Unix domain\n\ 2005 \032 socket) (with socket path as argument).\n\ 2006 \n\ 2007 \032 sortbysize\n\ 2008 \032 When this flag is set, the user interface will list changed\n\ 2009 \032 files by size (smallest first) rather than by name. This is\n\ 2010 \032 useful, for example, for synchronizing over slow links, since it\n\ 2011 \032 puts very large files at the end of the list where they will not\n\ 2012 \032 prevent smaller files from being transferred quickly.\n\ 2013 \n\ 2014 \032 This preference (as well as the other sorting flags, but not the\n\ 2015 \032 sorting preferences that require patterns as arguments) can be\n\ 2016 \032 set interactively and temporarily using the \226\128\153Sort\226\128\153 menu in the\n\ 2017 \032 graphical and text user interfaces.\n\ 2018 \n\ 2019 \032 sortfirst xxx\n\ 2020 \032 Each argument to sortfirst is a pattern pathspec, which\n\ 2021 \032 describes a set of paths. Files matching any of these patterns\n\ 2022 \032 will be listed first in the user interface. The syntax of\n\ 2023 \032 pathspec is described in the section \226\128\156Path Specification\226\128\157 .\n\ 2024 \n\ 2025 \032 sortlast xxx\n\ 2026 \032 Similar to sortfirst, except that files matching one of these\n\ 2027 \032 patterns will be listed at the very end.\n\ 2028 \n\ 2029 \032 sortnewfirst\n\ 2030 \032 When this flag is set, the user interface will list newly\n\ 2031 \032 created files before all others. This is useful, for example,\n\ 2032 \032 for checking that newly created files are not \226\128\152junk\226\128\153, i.e., ones\n\ 2033 \032 that should be ignored or deleted rather than synchronized.\n\ 2034 \n\ 2035 \032 source xxx\n\ 2036 \032 Include preferences from a file. source name reads the file\n\ 2037 \032 \"name\" in the .unison directory and includes its contents as if\n\ 2038 \032 it was part of a profile or given directly on command line.\n\ 2039 \n\ 2040 \032 sshargs xxx\n\ 2041 \032 The string value of this preference will be passed as additional\n\ 2042 \032 arguments (besides the host name and the name of the Unison\n\ 2043 \032 executable on the remote system) to the ssh command used to\n\ 2044 \032 invoke the remote server. The backslash is an escape character.\n\ 2045 \n\ 2046 \032 sshcmd xxx\n\ 2047 \032 This preference can be used to explicitly set the name of the\n\ 2048 \032 ssh executable (e.g., giving a full path name), if necessary.\n\ 2049 \n\ 2050 \032 stream\n\ 2051 \032 (Deprecated) When this preference is set, Unison will use an\n\ 2052 \032 experimental streaming protocol for transferring file contents\n\ 2053 \032 more efficiently. The default value is true.\n\ 2054 \n\ 2055 \032 terse\n\ 2056 \032 When this preference is set to true, the user interface will not\n\ 2057 \032 print status messages.\n\ 2058 \n\ 2059 \032 testserver\n\ 2060 \032 Setting this flag on the command line causes Unison to attempt\n\ 2061 \032 to connect to the remote server and, if successful, print a\n\ 2062 \032 message and immediately exit. Useful for debugging installation\n\ 2063 \032 problems. Should not be set in preference files.\n\ 2064 \n\ 2065 \032 times\n\ 2066 \032 When this flag is set to true, file modification times (but not\n\ 2067 \032 directory modtimes) are propagated.\n\ 2068 \n\ 2069 \032 ui xxx\n\ 2070 \032 This preference selects either the graphical or the textual user\n\ 2071 \032 interface. Legal values are graphic or text.\n\ 2072 \n\ 2073 \032 Because this option is processed specially during Unison\226\128\153s\n\ 2074 \032 start-up sequence, it can only be used on the command line. In\n\ 2075 \032 preference files it has no effect.\n\ 2076 \n\ 2077 \032 If the Unison executable was compiled with only a textual\n\ 2078 \032 interface, this option has no effect. (The pre-compiled binaries\n\ 2079 \032 are all compiled with both interfaces available.)\n\ 2080 \n\ 2081 \032 unicode xxx\n\ 2082 \032 When set to true, this flag causes Unison to perform case\n\ 2083 \032 insensitive file comparisons assuming Unicode encoding. This is\n\ 2084 \032 the default. When the flag is set to false, Latin 1 encoding is\n\ 2085 \032 assumed (this means that all bytes that are not letters in Latin\n\ 2086 \032 1 encoding will be compared byte-for-byte, even if they may be\n\ 2087 \032 valid characters in some other encoding). When Unison runs in\n\ 2088 \032 case sensitive mode, this flag only makes a difference if one\n\ 2089 \032 host is running Mac OS X. Under Mac OS X, it selects whether\n\ 2090 \032 comparing the filenames up to decomposition, or byte-for-byte.\n\ 2091 \n\ 2092 \032 version\n\ 2093 \032 Print the current version number and exit. (This option only\n\ 2094 \032 makes sense on the command line.)\n\ 2095 \n\ 2096 \032 watch\n\ 2097 \032 Unison uses a file watcher process, when available, to detect\n\ 2098 \032 filesystem changes; this is used to speed up update detection.\n\ 2099 \032 Setting this flag to false disables the use of this process.\n\ 2100 \n\ 2101 \032 xattrignore xxx\n\ 2102 \032 Preference -xattrignore namespec causes Unison to ignore\n\ 2103 \032 extended attributes with names that match namespec. This can be\n\ 2104 \032 used to exclude extended attributes that would fail\n\ 2105 \032 synchronization due to lack of permissions or technical\n\ 2106 \032 differences at replicas. The syntax of namespec is the same as\n\ 2107 \032 used for path specification (described in the section \226\128\156Path\n\ 2108 \032 Specification\226\128\157 ); prefer the Path and Regex forms over the Name\n\ 2109 \032 form. The pattern is applied to the name of extended attribute,\n\ 2110 \032 not to path. On Linux, attributes in the security and trusted\n\ 2111 \032 namespaces are ignored by default (this is achieved by pattern\n\ 2112 \032 Regex !(security|trusted)[.].*); also attributes used to store\n\ 2113 \032 POSIX ACL are ignored by default (this is achieved by pattern\n\ 2114 \032 Path !system.posix_acl_*). To sync attributes in one or both of\n\ 2115 \032 these namespaces, see the xattrignorenot preference. Note that\n\ 2116 \032 the namespace name must be prefixed with a \"!\" (applies on Linux\n\ 2117 \032 only). All names not prefixed with a \"!\" are taken as strictly\n\ 2118 \032 belonging to the user namespace and therefore the \"!user.\"\n\ 2119 \032 prefix is never used.\n\ 2120 \n\ 2121 \032 xattrignorenot xxx\n\ 2122 \032 This preference overrides the preference xattrignore. It gives a\n\ 2123 \032 list of patterns (in the same format as xattrignore) for\n\ 2124 \032 extended attributes that should not be ignored, whether or not\n\ 2125 \032 they happen to match one of the xattrignore patterns. It is\n\ 2126 \032 possible to synchronize only desired attributes by ignoring all\n\ 2127 \032 attributes (for example, by setting xattrignore to Path * and\n\ 2128 \032 then adding xattrignorenot for extended attributes that should\n\ 2129 \032 be synchronized. On Linux, attributes in the security and\n\ 2130 \032 trusted namespaces are ignored by default. To sync attributes in\n\ 2131 \032 one or both of these namespaces, you may add an xattrignorenot\n\ 2132 \032 pattern like Path !security.* to sync all attributes in the\n\ 2133 \032 security namespace, or Path !security.selinux to sync a specific\n\ 2134 \032 attribute in an otherwise ignored namespace. A pattern like Path\n\ 2135 \032 !system.posix_acl_* can be used to sync POSIX ACLs on Linux.\n\ 2136 \032 Note that the namespace name must be prefixed with a \"!\"\n\ 2137 \032 (applies on Linux only). All names not prefixed with a \"!\" are\n\ 2138 \032 taken as strictly belonging to the user namespace and therefore\n\ 2139 \032 the \"!user.\" prefix is never used.\n\ 2140 \n\ 2141 \032 xattrs\n\ 2142 \032 When this flag is set to true, the extended attributes of files\n\ 2143 \032 and directories are synchronized. System extended attributes are\n\ 2144 \032 not synchronized.\n\ 2145 \n\ 2146 \032 xferbycopying\n\ 2147 \032 When this preference is set, Unison will try to avoid\n\ 2148 \032 transferring file contents across the network by recognizing\n\ 2149 \032 when a file with the required contents already exists in the\n\ 2150 \032 target replica. This usually allows file moves to be propagated\n\ 2151 \032 very quickly. The default value is true.\n\ 2152 \n\ 2153 Profiles\n\ 2154 \n\ 2155 \032 A profile is a text file that specifies permanent settings for roots,\n\ 2156 \032 paths, ignore patterns, and other preferences, so that they do not need\n\ 2157 \032 to be typed at the command line every time Unison is run. Profiles\n\ 2158 \032 should reside in the .unison directory on the client machine. If Unison\n\ 2159 \032 is started with just one argument name on the command line, it looks\n\ 2160 \032 for a profile called name.prf in the .unison directory. If it is\n\ 2161 \032 started with no arguments, it scans the .unison directory for files\n\ 2162 \032 whose names end in .prf and offers a menu (provided that the Unison\n\ 2163 \032 executable is compiled with the graphical user interface). If a file\n\ 2164 \032 named default.prf is found, its settings will be offered as the default\n\ 2165 \032 choices.\n\ 2166 \n\ 2167 \032 To set the value of a preference p permanently, add to the appropriate\n\ 2168 \032 profile a line of the form\n\ 2169 \032 p = true\n\ 2170 \n\ 2171 \032 for a boolean flag or\n\ 2172 \032 p = <value>\n\ 2173 \n\ 2174 \032 for a preference of any other type.\n\ 2175 \n\ 2176 \032 A profile may include blank lines and lines beginning with #; both are\n\ 2177 \032 ignored.\n\ 2178 \n\ 2179 \032 Spaces and tabs before and after p and xxx are ignored. Spaces, tabs,\n\ 2180 \032 and non-printable characters within values are not treated specially,\n\ 2181 \032 so that e.g. root = /foo bar refers to a directory containing a space.\n\ 2182 \032 (On systems using newline for line ending, carriage returns are\n\ 2183 \032 currently ignored, but this is not part of the specification.)\n\ 2184 \n\ 2185 \032 When Unison starts, it first reads the profile and then the command\n\ 2186 \032 line, so command-line options will override settings from the profile.\n\ 2187 \n\ 2188 \032 Profiles may also include lines of the form include name, which will\n\ 2189 \032 cause the file name (or name.prf, if name does not exist in the .unison\n\ 2190 \032 directory) to be read at the point, and included as if its contents,\n\ 2191 \032 instead of the include line, was part of the profile. Include lines\n\ 2192 \032 allows settings common to several profiles to be stored in one place. A\n\ 2193 \032 similar line of the form source name does the same except that it does\n\ 2194 \032 not attempt to add a suffix to name. Similar lines of the form include?\n\ 2195 \032 name or source? name do the same as their respective lines without the\n\ 2196 \032 question mark except that it does not constitute an error to specify a\n\ 2197 \032 non-existing file name. In name the backslash is an escape character.\n\ 2198 \n\ 2199 \032 A profile may include a preference \226\128\152label = desc\226\128\153 to provide a\n\ 2200 \032 description of the options selected in this profile. The string desc is\n\ 2201 \032 listed along with the profile name in the profile selection dialog, and\n\ 2202 \032 displayed in the top-right corner of the main Unison window in the\n\ 2203 \032 graphical user interface.\n\ 2204 \n\ 2205 \032 The graphical user-interface also supports one-key shortcuts for\n\ 2206 \032 commonly used profiles. If a profile contains a preference of the form\n\ 2207 \032 \226\128\152key = n\226\128\153, where n is a single digit, then pressing this digit key will\n\ 2208 \032 cause Unison to immediately switch to this profile and begin\n\ 2209 \032 synchronization again from scratch. In this case, all actions that have\n\ 2210 \032 been selected for a set of changes currently being displayed will be\n\ 2211 \032 discarded.\n\ 2212 \n\ 2213 Sample Profiles\n\ 2214 \n\ 2215 A Minimal Profile\n\ 2216 \n\ 2217 \032 Here is a very minimal profile file, such as might be found in\n\ 2218 \032 .unison/default.prf:\n\ 2219 \032 # Roots of the synchronization\n\ 2220 \032 root = /home/bcpierce\n\ 2221 \032 root = ssh://saul//home/bcpierce\n\ 2222 \n\ 2223 \032 # Paths to synchronize\n\ 2224 \032 path = current\n\ 2225 \032 path = common\n\ 2226 \032 path = .netscape/bookmarks.html\n\ 2227 \n\ 2228 A Basic Profile\n\ 2229 \n\ 2230 \032 Here is a more sophisticated profile, illustrating some other useful\n\ 2231 \032 features.\n\ 2232 \032 # Roots of the synchronization\n\ 2233 \032 root = /home/bcpierce\n\ 2234 \032 root = ssh://saul//home/bcpierce\n\ 2235 \n\ 2236 \032 # Paths to synchronize\n\ 2237 \032 path = current\n\ 2238 \032 path = common\n\ 2239 \032 path = .netscape/bookmarks.html\n\ 2240 \n\ 2241 \032 # Some regexps specifying names and paths to ignore\n\ 2242 \032 ignore = Name temp.*\n\ 2243 \032 ignore = Name *~\n\ 2244 \032 ignore = Name .*~\n\ 2245 \032 ignore = Path */pilot/backup/Archive_*\n\ 2246 \032 ignore = Name *.o\n\ 2247 \032 ignore = Name *.tmp\n\ 2248 \n\ 2249 \032 # Window height\n\ 2250 \032 height = 37\n\ 2251 \n\ 2252 \032 # Keep a backup copy of every file in a central location\n\ 2253 \032 backuplocation = central\n\ 2254 \032 backupdir = /home/bcpierce/backups\n\ 2255 \032 backup = Name *\n\ 2256 \032 backupprefix = $VERSION.\n\ 2257 \032 backupsuffix =\n\ 2258 \n\ 2259 \032 # Use this command for displaying diffs\n\ 2260 \032 diff = diff -y -W 79 --suppress-common-lines\n\ 2261 \n\ 2262 \032 # Log actions to the terminal\n\ 2263 \032 log = true\n\ 2264 \n\ 2265 A Power-User Profile\n\ 2266 \n\ 2267 \032 When Unison is used with large replicas, it is often convenient to be\n\ 2268 \032 able to synchronize just a part of the replicas on a given run (this\n\ 2269 \032 saves the time of detecting updates in the other parts). This can be\n\ 2270 \032 accomplished by splitting up the profile into several parts \226\128\148 a common\n\ 2271 \032 part containing most of the preference settings, plus one \226\128\156top-level\226\128\157\n\ 2272 \032 file for each set of paths that need to be synchronized. (The include\n\ 2273 \032 mechanism can also be used to allow the same set of preference settings\n\ 2274 \032 to be used with different roots.)\n\ 2275 \n\ 2276 \032 The collection of profiles implementing this scheme might look as\n\ 2277 \032 follows. The file default.prf is empty except for an include directive:\n\ 2278 \032 # Include the contents of the file common\n\ 2279 \032 include common\n\ 2280 \n\ 2281 \032 Note that the name of the common file is common, not common.prf; this\n\ 2282 \032 prevents Unison from offering common as one of the list of profiles in\n\ 2283 \032 the opening dialog (in the graphical UI).\n\ 2284 \n\ 2285 \032 The file common contains the real preferences:\n\ 2286 \032 # Roots of the synchronization\n\ 2287 \032 root = /home/bcpierce\n\ 2288 \032 root = ssh://saul//home/bcpierce\n\ 2289 \n\ 2290 \032 # (... other preferences ...)\n\ 2291 \n\ 2292 \032 # If any new preferences are added by Unison (e.g. 'ignore'\n\ 2293 \032 # preferences added via the graphical UI), then store them in the\n\ 2294 \032 # file 'common' rather than in the top-level preference file\n\ 2295 \032 addprefsto = common\n\ 2296 \n\ 2297 \032 # Names and paths to ignore:\n\ 2298 \032 ignore = Name temp.*\n\ 2299 \032 ignore = Name *~\n\ 2300 \032 ignore = Name .*~\n\ 2301 \032 ignore = Path */pilot/backup/Archive_*\n\ 2302 \032 ignore = Name *.o\n\ 2303 \032 ignore = Name *.tmp\n\ 2304 \n\ 2305 \032 Note that there are no path preferences in common. This means that,\n\ 2306 \032 when we invoke Unison with the default profile (e.g., by typing \226\128\153unison\n\ 2307 \032 default\226\128\153 or just \226\128\153unison\226\128\153 on the command line), the whole replicas will\n\ 2308 \032 be synchronized. (If we never want to synchronize the whole replicas,\n\ 2309 \032 then default.prf would instead include settings for all the paths that\n\ 2310 \032 are usually synchronized.)\n\ 2311 \n\ 2312 \032 To synchronize just part of the replicas, Unison is invoked with an\n\ 2313 \032 alternate preference file\226\128\148e.g., doing \226\128\153unison workingset\226\128\153, where the\n\ 2314 \032 preference file workingset.prf contains\n\ 2315 \032 path = current/papers\n\ 2316 \032 path = Mail/inbox\n\ 2317 \032 path = Mail/drafts\n\ 2318 \032 include common\n\ 2319 \n\ 2320 \032 causes Unison to synchronize just the listed subdirectories.\n\ 2321 \n\ 2322 \032 The key preference can be used in combination with the graphical UI to\n\ 2323 \032 quickly switch between different sets of paths. For example, if the\n\ 2324 \032 file mail.prf contains\n\ 2325 \032 path = Mail\n\ 2326 \032 batch = true\n\ 2327 \032 key = 2\n\ 2328 \032 include common\n\ 2329 \n\ 2330 \032 then pressing 2 will cause Unison to look for updates in the Mail\n\ 2331 \032 subdirectory and (because the batch flag is set) immediately propagate\n\ 2332 \032 any that it finds.\n\ 2333 \n\ 2334 Keeping Backups\n\ 2335 \n\ 2336 \032 When Unison overwrites (or deletes) a file or directory while\n\ 2337 \032 propagating changes from the other replica, it can keep the old version\n\ 2338 \032 around as a backup. There are several preferences that control\n\ 2339 \032 precisely where these backups are stored and how they are named.\n\ 2340 \n\ 2341 \032 To enable backups, you must give one or more backup preferences. Each\n\ 2342 \032 of these has the form\n\ 2343 \032 backup = <pathspec>\n\ 2344 \n\ 2345 \032 where <pathspec> has the same form as for the ignore preference. For\n\ 2346 \032 example,\n\ 2347 \032 backup = Name *\n\ 2348 \n\ 2349 \032 causes Unison to create backups of all files and directories. The\n\ 2350 \032 backupnot preference can be used to give a few exceptions: it specifies\n\ 2351 \032 which files and directories should not be backed up, even if they match\n\ 2352 \032 the backup pathspec.\n\ 2353 \n\ 2354 \032 It is important to note that the pathspec is matched against the path\n\ 2355 \032 that is being updated by Unison, not its descendants. For example, if\n\ 2356 \032 you set backup = Name *.txt and then delete a whole directory named foo\n\ 2357 \032 containing some text files, these files will not be backed up because\n\ 2358 \032 Unison will just check that foo does not match *.txt. Similarly, if the\n\ 2359 \032 directory itself happened to be called foo.txt, then the whole\n\ 2360 \032 directory and all the files in it will be backed up, regardless of\n\ 2361 \032 their names.\n\ 2362 \n\ 2363 \032 Backup files can be stored either centrally or locally. This behavior\n\ 2364 \032 is controlled by the preference backuplocation, whose value must be\n\ 2365 \032 either central or local. (The default is central.) Note that central\n\ 2366 \032 storage of backups can lead to backup files being stored in a different\n\ 2367 \032 filesystem than the original files, which could have different security\n\ 2368 \032 properties and different amounts of available storage.\n\ 2369 \n\ 2370 \032 When backups are stored locally, they are kept in the same directory as\n\ 2371 \032 the original.\n\ 2372 \n\ 2373 \032 When backups are stored centrally, the directory used to hold them is\n\ 2374 \032 controlled by the preference backupdir and the environment variable\n\ 2375 \032 UNISONBACKUPDIR. (The environment variable is checked first.) If\n\ 2376 \032 neither of these are set, then the directory .unison/backup in the\n\ 2377 \032 user\226\128\153s home directory is used.\n\ 2378 \n\ 2379 \032 The preference maxbackups (default 2) controls how many previous\n\ 2380 \032 versions of each file are kept (including the current version),\n\ 2381 \032 following the usual plan of deleting the oldest when creating a new\n\ 2382 \032 one.\n\ 2383 \n\ 2384 \032 By default, backup files are named .bak.VERSION.FILENAME, where\n\ 2385 \032 FILENAME is the original filename and VERSION is the backup number (1\n\ 2386 \032 for the most recent, 2 for the next most recent, etc.). This can be\n\ 2387 \032 changed by setting the preferences backupprefix and/or backupsuffix. If\n\ 2388 \032 desired, backupprefix may include a directory prefix; this can be used\n\ 2389 \032 with backuplocation = local to put all backup files for each directory\n\ 2390 \032 into a single subdirectory. For example, setting\n\ 2391 \032 backuplocation = local\n\ 2392 \032 backupprefix = .unison/$VERSION.\n\ 2393 \032 backupsuffix =\n\ 2394 \n\ 2395 \032 will put all backups in a local subdirectory named .unison. Also, note\n\ 2396 \032 that the string $VERSION in either backupprefix or backupsuffix (it\n\ 2397 \032 must appear in one or the other) is replaced by the version number.\n\ 2398 \032 This can be used, for example, to ensure that backup files retain the\n\ 2399 \032 same extension as the originals.\n\ 2400 \n\ 2401 \032 Other than maxbackups (which will never delete the last backup), there\n\ 2402 \032 are no other mechanisms for deleting backups.\n\ 2403 \n\ 2404 \032 For backward compatibility, the backups preference is also supported.\n\ 2405 \032 It simply means backup = Name * and backuplocation = local.\n\ 2406 \n\ 2407 Merging Conflicting Versions\n\ 2408 \n\ 2409 \032 Unison can invoke external programs to merge conflicting versions of a\n\ 2410 \032 file. The preference merge controls this process.\n\ 2411 \n\ 2412 \032 The merge preference may be given once or several times in a preference\n\ 2413 \032 file (it can also be given on the command line, of course, but this\n\ 2414 \032 tends to be awkward because of the spaces and special characters\n\ 2415 \032 involved). Each instance of the preference looks like this:\n\ 2416 \032 merge = <PATHSPEC> -> <MERGECMD>\n\ 2417 \n\ 2418 \032 The <PATHSPEC> here has exactly the same format as for the ignore\n\ 2419 \032 preference (see the section \226\128\156Path Specification\226\128\157 ). For example, using\n\ 2420 \032 \226\128\156Name *.txt\226\128\157 as the <PATHSPEC> tells Unison that this command should be\n\ 2421 \032 used whenever a file with extension .txt needs to be merged.\n\ 2422 \n\ 2423 \032 Many external merging programs require as inputs not just the two files\n\ 2424 \032 that need to be merged, but also a file containing the last\n\ 2425 \032 synchronized version. You can ask Unison to keep a copy of the last\n\ 2426 \032 synchronized version for some files using the backupcurrent preference.\n\ 2427 \032 This preference is used in exactly the same way as backup and its\n\ 2428 \032 meaning is similar, except that it causes backups to be created of the\n\ 2429 \032 current contents of each file after it has been synchronized by Unison,\n\ 2430 \032 rather than the previous contents that Unison overwrote. These backups\n\ 2431 \032 are stored in both replicas in the same place as ordinary backup\n\ 2432 \032 files\226\128\148i.e. according to the backuplocation and backupdir preferences.\n\ 2433 \032 They are named like the original files if backupslocation is set to\n\ 2434 \032 \226\128\153central\226\128\153 and otherwise, Unison uses the backupprefix and backupsuffix\n\ 2435 \032 preferences and assumes a version number 000 for these backups. Note\n\ 2436 \032 that there are no mechanisms (beyond the limit on the number of backups\n\ 2437 \032 for each file) to remove backup files.\n\ 2438 \n\ 2439 \032 The <MERGECMD> part of the preference specifies what external command\n\ 2440 \032 should be invoked to merge files at paths matching the <PATHSPEC>.\n\ 2441 \032 Within this string, several special substrings are recognized; these\n\ 2442 \032 will be substituted with appropriate values before invoking a sub-shell\n\ 2443 \032 to execute the command.\n\ 2444 \032 * CURRENT1 is replaced by the name of (a temporary copy of) the local\n\ 2445 \032 variant of the file.\n\ 2446 \032 * CURRENT2 is replaced by the name of a temporary file, into which\n\ 2447 \032 the contents of the remote variant of the file have been\n\ 2448 \032 transferred by Unison prior to performing the merge.\n\ 2449 \032 * CURRENTARCH is replaced by the name of the backed up copy of the\n\ 2450 \032 original version of the file (i.e., the file saved by Unison if the\n\ 2451 \032 current filename matches the path specifications for the\n\ 2452 \032 backupcurrent preference, as explained above), if one exists. If no\n\ 2453 \032 archive exists and CURRENTARCH appears in the merge command, then\n\ 2454 \032 an error is signalled.\n\ 2455 \032 * CURRENTARCHOPT is replaced by the name of the backed up copy of the\n\ 2456 \032 original version of the file (i.e., its state at the end of the\n\ 2457 \032 last successful run of Unison), if one exists, or the empty string\n\ 2458 \032 if no archive exists.\n\ 2459 \032 * NEW is replaced by the name of a temporary file that Unison expects\n\ 2460 \032 to be written by the merge program when it finishes, giving the\n\ 2461 \032 desired new contents of the file.\n\ 2462 \032 * PATH is replaced by the path (relative to the roots of the\n\ 2463 \032 replicas) of the file being merged.\n\ 2464 \032 * NEW1 and NEW2 are replaced by the names of temporary files that\n\ 2465 \032 Unison expects to be written by the merge program when it is only\n\ 2466 \032 able to partially merge the originals; in this case, NEW1 will be\n\ 2467 \032 written back to the local replica and NEW2 to the remote replica;\n\ 2468 \032 NEWARCH, if present, will be used as the \226\128\156last common state\226\128\157 of the\n\ 2469 \032 replicas. (These three options are provided for later compatibility\n\ 2470 \032 with the Harmony data synchronizer.)\n\ 2471 \032 * BATCHMODE is replaced according to the batch mode of Unison; if it\n\ 2472 \032 is in batch mode, then a non empty string (\226\128\156batch\226\128\157) is substituted,\n\ 2473 \032 otherwise the empty string is substituted.\n\ 2474 \n\ 2475 \032 To accommodate the wide variety of programs that users might want to\n\ 2476 \032 use for merging, Unison checks for several possible situations when the\n\ 2477 \032 merge program exits:\n\ 2478 \032 * If the merge program exits with a non-zero status, then merge is\n\ 2479 \032 considered to have failed and the replicas are not changed.\n\ 2480 \032 * If the file NEW has been created, it is written back to both\n\ 2481 \032 replicas (and stored in the backup directory). Similarly, if just\n\ 2482 \032 the file NEW1 has been created, it is written back to both\n\ 2483 \032 replicas.\n\ 2484 \032 * If neither NEW nor NEW1 have been created, then Unison examines the\n\ 2485 \032 temporary files CURRENT1 and CURRENT2 that were given as inputs to\n\ 2486 \032 the merge program. If either has been changed (or both have been\n\ 2487 \032 changed in identical ways), then its new contents are written back\n\ 2488 \032 to both replicas. If either CURRENT1 or CURRENT2 has been deleted,\n\ 2489 \032 then the contents of the other are written back to both replicas.\n\ 2490 \032 * If the files NEW1, NEW2, and NEWARCH have all been created, they\n\ 2491 \032 are written back to the local replica, remote replica, and backup\n\ 2492 \032 directory, respectively. If the files NEW1, NEW2 have been created,\n\ 2493 \032 but NEWARCH has not, then these files are written back to the local\n\ 2494 \032 replica and remote replica, respectively. Also, if NEW1 and NEW2\n\ 2495 \032 have identical contents, then the same contents are stored as a\n\ 2496 \032 backup (if the backupcurrent preference is set for this path) to\n\ 2497 \032 reflect the fact that the path is currently in sync.\n\ 2498 \032 * If NEW1 and NEW2 (resp. CURRENT1 and CURRENT2) are created (resp.\n\ 2499 \032 overwritten) with different contents but the merge command did not\n\ 2500 \032 fail (i.e., it exited with status code 0), then we copy NEW1 (resp.\n\ 2501 \032 CURRENT1) to the other replica and to the archive.\n\ 2502 \032 This behavior is a design choice made to handle the case where a\n\ 2503 \032 merge command only synchronizes some specific contents between two\n\ 2504 \032 files, skipping some irrelevant information (order between entries,\n\ 2505 \032 for instance). We assume that, if the merge command exits normally,\n\ 2506 \032 then the two resulting files are \226\128\156as good as equal.\226\128\157 (The reason we\n\ 2507 \032 copy one on top of the other is to avoid Unison detecting that the\n\ 2508 \032 files are unequal the next time it is run and trying again to merge\n\ 2509 \032 them when, in fact, the merge program has already made them as\n\ 2510 \032 similar as it is able to.)\n\ 2511 \n\ 2512 \032 You can disable a merge by setting a <MERGECMD> that does nothing. For\n\ 2513 \032 example you can override the merging of text files specified in a\n\ 2514 \032 profile by typing on the command line:\n\ 2515 \032 unison profile -merge 'Name *.txt -> echo SKIP'\n\ 2516 \n\ 2517 \032 If the confirmmerge preference is set and Unison is not run in batch\n\ 2518 \032 mode, then Unison will always ask for confirmation before actually\n\ 2519 \032 committing the results of the merge to the replicas.\n\ 2520 \n\ 2521 \032 You can detect batch mode by testing BATCHMODE; for example to avoid a\n\ 2522 \032 merge completely do nothing:\n\ 2523 \032 merge = Name *.txt -> [ -z \"BATCHMODE\" ] && mergecmd CURRENT1 CURRENT2\n\ 2524 \n\ 2525 \032 A large number of external merging programs are available. For example,\n\ 2526 \032 on Unix systems setting the merge preference to\n\ 2527 \032 merge = Name *.txt -> diff3 -m CURRENT1 CURRENTARCH CURRENT2\n\ 2528 \032 > NEW || echo \"differences detected\"\n\ 2529 \n\ 2530 \032 will tell Unison to use the external diff3 program for merging.\n\ 2531 \032 Alternatively, users of emacs may find the following settings\n\ 2532 \032 convenient:\n\ 2533 \032 merge = Name *.txt -> emacs -q --eval '(ediff-merge-files-with-ancestor\n\ 2534 \032 \"CURRENT1\" \"CURRENT2\" \"CURRENTARCH\" nil \"NEW\")'\n\ 2535 \n\ 2536 \032 (These commands are displayed here on two lines to avoid running off\n\ 2537 \032 the edge of the page. In your preference file, each command should be\n\ 2538 \032 written on a single line.)\n\ 2539 \n\ 2540 \032 Users running emacs under windows may find something like this useful:\n\ 2541 \032 merge = Name * -> C:\\Progra~1\\Emacs\\emacs\\bin\\emacs.exe -q --eval\n\ 2542 \032 \"(ediff-files \"\"\"CURRENT1\"\"\" \"\"\"CURRENT2\"\"\")\"\n\ 2543 \n\ 2544 \032 Users running Mac OS X (you may need the Developer Tools installed to\n\ 2545 \032 get the opendiff utility) may prefer\n\ 2546 \032 merge = Name *.txt -> opendiff CURRENT1 CURRENT2 -ancestor CURRENTARCH -merg\n\ 2547 e NEW\n\ 2548 \n\ 2549 \032 Here is a slightly more involved hack. The opendiff program can operate\n\ 2550 \032 either with or without an archive file. A merge command of this form\n\ 2551 \032 merge = Name *.txt ->\n\ 2552 \032 if [ CURRENTARCHOPTx = x ];\n\ 2553 \032 then opendiff CURRENT1 CURRENT2 -merge NEW;\n\ 2554 \032 else opendiff CURRENT1 CURRENT2 -ancestor CURRENTARCHOPT -merge NE\n\ 2555 W;\n\ 2556 \032 fi\n\ 2557 \n\ 2558 \032 (still all on one line in the preference file!) will test whether an\n\ 2559 \032 archive file exists and use the appropriate variant of the arguments to\n\ 2560 \032 opendiff.\n\ 2561 \n\ 2562 \032 Linux users may enjoy this variant:\n\ 2563 \032 merge = Name * -> kdiff3 -o NEW CURRENTARCHOPT CURRENT1 CURRENT2\n\ 2564 \n\ 2565 \032 Ordinarily, external merge programs are only invoked when Unison is not\n\ 2566 \032 running in batch mode. To specify an external merge program that should\n\ 2567 \032 be used no matter the setting of the batch flag, use the mergebatch\n\ 2568 \032 preference instead of merge.\n\ 2569 \n\ 2570 \032 Please post suggestions for other useful values of the merge\n\ 2571 \032 preference to the unison-users mailing list\226\128\148we\226\128\153d like to give\n\ 2572 \032 several examples here.\n\ 2573 \n\ 2574 The User Interface\n\ 2575 \n\ 2576 \032 Both the textual and the graphical user interfaces are intended to be\n\ 2577 \032 mostly self-explanatory. Here are just a few tricks:\n\ 2578 \032 * By default, when running on Unix the textual user interface will\n\ 2579 \032 try to put the terminal into the \226\128\156raw mode\226\128\157 so that it reads the\n\ 2580 \032 input a character at a time rather than a line at a time. (This\n\ 2581 \032 means you can type just the single keystroke \226\128\156>\226\128\157 to tell Unison to\n\ 2582 \032 propagate a file from left to right, rather than \226\128\156> Enter.\226\128\157)\n\ 2583 \032 There are some situations, though, where this will not work \226\128\148 for\n\ 2584 \032 example, when Unison is running in a shell window inside Emacs.\n\ 2585 \032 Setting the dumbtty preference will force Unison to leave the\n\ 2586 \032 terminal alone and process input a line at a time.\n\ 2587 \n\ 2588 Interrupting a Synchronization\n\ 2589 \n\ 2590 \032 It is possible to interrupt an ongoing synchronization process before\n\ 2591 \032 it completes. Different user interfaces offer different ways of doing\n\ 2592 \032 it.\n\ 2593 \n\ 2594 \032 Graphical Interface:\n\ 2595 \032 * In the graphical user interface the synchronization process can be\n\ 2596 \032 interrupted before it is finished by pressing the \226\128\156Stop\226\128\157 button or\n\ 2597 \032 by closing the window. The \226\128\156Stop\226\128\157 button causes the onging\n\ 2598 \032 propagation to be stopped as quickly as possible while still doing\n\ 2599 \032 proper cleanup. The application keeps running and a rescan can be\n\ 2600 \032 performed or a different profile selected. Closing the window in\n\ 2601 \032 the middle of update propagation process will exit the application\n\ 2602 \032 immediately without doing proper cleanup; it is therefore not\n\ 2603 \032 recommended unless the \226\128\156Stop\226\128\157 button does not react quickly enough.\n\ 2604 \n\ 2605 \032 Textual Interface:\n\ 2606 \032 * When not synchronizing continuously, the text interface terminates\n\ 2607 \032 when synchronization is finished normally or due to a fatal error\n\ 2608 \032 occurring.\n\ 2609 \032 In the text interface, to interrupt synchronization before it is\n\ 2610 \032 finished, press \226\128\156Ctrl-C\226\128\157 (or send signal SIGINT or SIGTERM). This\n\ 2611 \032 will interrupt update propagation as quickly as possible but still\n\ 2612 \032 complete proper cleanup. If the process does not stop even after\n\ 2613 \032 pressing \226\128\156Ctrl-C\226\128\157 then keep doing it repeatedly. This will bypass\n\ 2614 \032 cleanup procedures and terminates the process forcibly (similar to\n\ 2615 \032 SIGKILL). Doing so may leave the archives or replicas in an\n\ 2616 \032 inconsistent state or locked.\n\ 2617 \032 When synchronizing continuously (time interval repeat or with\n\ 2618 \032 filesystem monitoring), interrupting with \226\128\156Ctrl-C\226\128\157 or with signal\n\ 2619 \032 SIGINT or SIGTERM works the same way as described above and will\n\ 2620 \032 additionally stop the continuous process. To stop only the\n\ 2621 \032 continuous process and let the last synchronization complete\n\ 2622 \032 normally, send signal SIGUSR2 instead.\n\ 2623 \n\ 2624 Exit Code\n\ 2625 \n\ 2626 \032 When running in the textual mode, Unison returns an exit status, which\n\ 2627 \032 describes whether, and at which level, the synchronization was\n\ 2628 \032 successful. The exit status could be useful when Unison is invoked from\n\ 2629 \032 a script. Currently, there are four possible values for the exit\n\ 2630 \032 status:\n\ 2631 \032 * 0: successful synchronization; everything is up-to-date now.\n\ 2632 \032 * 1: some files were skipped, but all file transfers were successful.\n\ 2633 \032 * 2: non-fatal failures occurred during file transfer.\n\ 2634 \032 * 3: a fatal error occurred, or the execution was interrupted.\n\ 2635 \n\ 2636 \032 The graphical interface does not return any useful information through\n\ 2637 \032 the exit status.\n\ 2638 \n\ 2639 Path Specification\n\ 2640 \n\ 2641 \032 Several Unison preferences (e.g., ignore/ignorenot, follow,\n\ 2642 \032 sortfirst/sortlast, backup, merge, etc.) specify individual paths or\n\ 2643 \032 sets of paths. These preferences share a common syntax based on\n\ 2644 \032 regular-expressions. Each preference is associated with a list of path\n\ 2645 \032 patterns; the paths specified are those that match any one of the path\n\ 2646 \032 pattern.\n\ 2647 \032 * Pattern preferences can be given on the command line, or, more\n\ 2648 \032 often, stored in profiles, using the same syntax as other\n\ 2649 \032 preferences. For example, a profile line of the form\n\ 2650 \032 ignore = pattern\n\ 2651 \n\ 2652 \032 adds pattern to the list of patterns to be ignored.\n\ 2653 \032 * Each pattern can have one of three forms. The most general form is\n\ 2654 \032 a POSIX Extended Regular Expression introduced by the keyword\n\ 2655 \032 Regex. (The collating symbol, equivalence class expression, and\n\ 2656 \032 character class expression described in Section 9.3.5 of the POSIX\n\ 2657 \032 specification\n\ 2658 \032 (https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap0\n\ 2659 \032 9.html#tag_09_03_05) are not currently supported).\n\ 2660 \032 Regex regexp\n\ 2661 \n\ 2662 \032 For convenience, three other styles of pattern are also recognized:\n\ 2663 \032 Name name\n\ 2664 \n\ 2665 \032 matches any path in which the last component matches name,\n\ 2666 \032 Path path\n\ 2667 \n\ 2668 \032 matches exactly the path path, and\n\ 2669 \032 BelowPath path\n\ 2670 \n\ 2671 \032 matches the path path and any path below. The name and path\n\ 2672 \032 arguments of the latter forms of patterns are not regular\n\ 2673 \032 expressions. Instead, standard \226\128\156globbing\226\128\157 conventions can be used\n\ 2674 \032 in name and path:\n\ 2675 \032 + a * matches any sequence of characters not including / (and\n\ 2676 \032 not beginning with ., when used at the beginning of a name)\n\ 2677 \032 + a ? matches any single character except / (and leading .)\n\ 2678 \032 + [xyz] matches any character from the set {x, y, z }\n\ 2679 \032 + {a,bb,ccc} matches any one of a, bb, or ccc. (Be careful not\n\ 2680 \032 to put extra spaces after the commas: these will be\n\ 2681 \032 interpreted literally as part of the strings to be matched!)\n\ 2682 \032 * The path separator in path patterns is always the forward-slash\n\ 2683 \032 character \226\128\156/\226\128\157 \226\128\148 even when the client or server is running under\n\ 2684 \032 Windows, where the normal separator character is a backslash. This\n\ 2685 \032 makes it possible to use the same set of path patterns for both\n\ 2686 \032 Unix and Windows file systems.\n\ 2687 \032 * A path specification may be followed by the separator \226\128\156 -> \226\128\157 itself\n\ 2688 \032 followed by a string which will be associated to the matching\n\ 2689 \032 paths:\n\ 2690 \032 Path path -> associated string\n\ 2691 \n\ 2692 \032 Not all pathspec preferences use these associated strings but all\n\ 2693 \032 pathspec preferences are parsed identically and the strings may be\n\ 2694 \032 ignored. Only the last match of the separator string on the line is\n\ 2695 \032 used as a delimiter. Thus to allow a path specification to contain\n\ 2696 \032 the separator string, append an associated string to it, even if it\n\ 2697 \032 is not used. The associated string cannot contain the separator\n\ 2698 \032 string.\n\ 2699 \n\ 2700 \032 Some examples of path patterns appear in the section \226\128\156Ignoring Paths\226\128\157 .\n\ 2701 \032 Associated strings are used by the preference merge.\n\ 2702 \n\ 2703 Ignoring Paths\n\ 2704 \n\ 2705 \032 Most users of Unison will find that their replicas contain lots of\n\ 2706 \032 files that they don\226\128\153t ever want to synchronize \226\128\148 temporary files, very\n\ 2707 \032 large files, old stuff, architecture-specific binaries, etc. They can\n\ 2708 \032 instruct Unison to ignore these paths using patterns introduced in the\n\ 2709 \032 section \226\128\156Path Specification\226\128\157 .\n\ 2710 \n\ 2711 \032 For example, the following pattern will make Unison ignore any path\n\ 2712 \032 containing the name CVS or a name ending in .cmo:\n\ 2713 \032 ignore = Name {CVS,*.cmo}\n\ 2714 \n\ 2715 \032 The next pattern makes Unison ignore the path a/b:\n\ 2716 \032 ignore = Path a/b\n\ 2717 \n\ 2718 \032 Path patterns do not skip filenames beginning with . (as Name patterns\n\ 2719 \032 do). For example,\n\ 2720 \032 ignore = Path */tmp\n\ 2721 \n\ 2722 \032 will include .foo/tmp in the set of ignore directories, as it is a\n\ 2723 \032 path, not a name, that is ignored.\n\ 2724 \n\ 2725 \032 The following pattern makes Unison ignore any path beginning with a/b\n\ 2726 \032 and ending with a name ending by .ml.\n\ 2727 \032 ignore = Regex a/b/.*\\.ml\n\ 2728 \n\ 2729 \032 Note that regular expression patterns are \226\128\156anchored\226\128\157: they must match\n\ 2730 \032 the whole path, not just a substring of the path.\n\ 2731 \n\ 2732 \032 Here are a few extra points regarding the ignore preference.\n\ 2733 \032 * If a directory is ignored, all its descendants will be too.\n\ 2734 \032 * The user interface provides some convenient commands for adding new\n\ 2735 \032 patterns to be ignored. To ignore a particular file, select it and\n\ 2736 \032 press \226\128\156i\226\128\157. To ignore all files with the same extension, select it\n\ 2737 \032 and press \226\128\156E\226\128\157 (with the shift key). To ignore all files with the\n\ 2738 \032 same name, no matter what directory they appear in, select it and\n\ 2739 \032 press \226\128\156N\226\128\157. These new patterns become permanent: they are\n\ 2740 \032 immediately added to the current profile on disk.\n\ 2741 \032 * If you use the include directive to include a common collection of\n\ 2742 \032 preferences in several top-level preference files, you will\n\ 2743 \032 probably also want to set the addprefsto preference to the name of\n\ 2744 \032 this file. This will cause any new ignore patterns that you add\n\ 2745 \032 from inside Unison to be appended to this file, instead of\n\ 2746 \032 whichever top-level preference file you started Unison with.\n\ 2747 \032 * Ignore patterns can also be specified on the command line, if you\n\ 2748 \032 like (this is probably not very useful), using an option like\n\ 2749 \032 -ignore 'Name temp.txt'.\n\ 2750 \032 * Be careful about renaming directories containing ignored files.\n\ 2751 \032 Because Unison understands the rename as a delete plus a create,\n\ 2752 \032 any ignored files in the directory will be lost (since they are\n\ 2753 \032 invisible to Unison and therefore they do not get recreated in the\n\ 2754 \032 new version of the directory).\n\ 2755 \032 * There is also an ignorenot preference, which specifies a set of\n\ 2756 \032 patterns for paths that should not be ignored, even if they match\n\ 2757 \032 an ignore pattern. However, the interaction of these two sets of\n\ 2758 \032 patterns can be a little tricky. Here is exactly how it works:\n\ 2759 \032 + Unison starts detecting updates from the root of the\n\ 2760 \032 replicas\226\128\148i.e., from the empty path. If the empty path matches\n\ 2761 \032 an ignore pattern and does not match an ignorenot pattern,\n\ 2762 \032 then the whole replica will be ignored. (For this reason, it\n\ 2763 \032 is not a good idea to include Name * as an ignore pattern. If\n\ 2764 \032 you want to ignore everything except a certain set of files,\n\ 2765 \032 use Name ?*.)\n\ 2766 \032 + If the root is a directory, Unison continues looking for\n\ 2767 \032 updates in all the immediate children of the root. Again, if\n\ 2768 \032 the name of some child matches an ignore pattern and does not\n\ 2769 \032 match an ignorenot pattern, then this whole path including\n\ 2770 \032 everything below it will be ignored.\n\ 2771 \032 + If any of the non-ignored children are directories, then the\n\ 2772 \032 process continues recursively.\n\ 2773 \n\ 2774 Symbolic Links\n\ 2775 \n\ 2776 \032 Ordinarily, Unison treats symbolic links in Unix replicas as \226\128\156opaque\226\128\157:\n\ 2777 \032 it considers the contents of the link to be just the string specifying\n\ 2778 \032 where the link points, and it will propagate changes in this string to\n\ 2779 \032 the other replica.\n\ 2780 \n\ 2781 \032 It is sometimes useful to treat a symbolic link \226\128\156transparently,\226\128\157 acting\n\ 2782 \032 as though whatever it points to were physically in the replica at the\n\ 2783 \032 point where the symbolic link appears. To tell Unison to treat a link\n\ 2784 \032 in this manner, add a line of the form\n\ 2785 \032 follow = pathspec\n\ 2786 \n\ 2787 \032 to the profile, where pathspec is a path pattern as described in the\n\ 2788 \032 section \226\128\156Path Specification\226\128\157 .\n\ 2789 \n\ 2790 \032 Not all Windows versions and file systems support symbolic links;\n\ 2791 \032 Unison will refuse to propagate an opaque symbolic link from Unix to\n\ 2792 \032 Windows and flag the path as erroneous if the support or privileges are\n\ 2793 \032 lacking on the Windows side. When a Unix replica is to be synchronized\n\ 2794 \032 with such Windows system, all symbolic links should match either an\n\ 2795 \032 ignore pattern or a follow pattern.\n\ 2796 \n\ 2797 \032 You may need to acquire extra privileges to create symbolic links under\n\ 2798 \032 Windows. By default, this is only allowed for administrators. Unison\n\ 2799 \032 may not be able to automatically detect support for symbolic links\n\ 2800 \032 under Windows. In that case, set the preference links to true\n\ 2801 \032 explicitly.\n\ 2802 \n\ 2803 Permissions\n\ 2804 \n\ 2805 \032 Synchronizing the permission bits of files is slightly tricky when two\n\ 2806 \032 different filesystems are involved (e.g., when synchronizing a Windows\n\ 2807 \032 client and a Unix server). In detail, here\226\128\153s how it works:\n\ 2808 \032 * When the permission bits of an existing file or directory are\n\ 2809 \032 changed, the values of those bits that make sense on both operating\n\ 2810 \032 systems will be propagated to the other replica. The other bits\n\ 2811 \032 will not be changed.\n\ 2812 \032 * When a newly created file is propagated to a remote replica, the\n\ 2813 \032 permission bits that make sense in both operating systems are also\n\ 2814 \032 propagated. The values of the other bits are set to default values\n\ 2815 \032 (they are taken from the current umask, if the receiving host is a\n\ 2816 \032 Unix system).\n\ 2817 \032 * For security reasons, the Unix setuid and setgid bits are not\n\ 2818 \032 propagated.\n\ 2819 \032 * The Unix owner and group ids can be propagated (see owner and group\n\ 2820 \032 preferences) by mapping names or by numeric ids (see numericids\n\ 2821 \032 preference).\n\ 2822 \n\ 2823 Access Control Lists - ACLs\n\ 2824 \n\ 2825 \032 Unison allows synchronizing access control lists (ACLs) on platforms\n\ 2826 \032 and filesystems that support them. In general, synchronization makes\n\ 2827 \032 sense only in case both replicas support the same type of ACLs and\n\ 2828 \032 recognize same users and groups. In some cases you may be able to go\n\ 2829 \032 beyond that and synchronize ACLs to a replica that couldn\226\128\153t fully use\n\ 2830 \032 them\226\128\148this may be be useful for the purpose of preserving ACLs.\n\ 2831 \n\ 2832 \032 If one of the replicas does not support any type of ACLs then Unison\n\ 2833 \032 will not attempt ACL synchronization. If the other replica does support\n\ 2834 \032 ACLs then those will remain intact.\n\ 2835 \n\ 2836 \032 If both replicas support ACLs of any supported type then you can\n\ 2837 \032 request Unison to try ACL synchronization (acl preference). Success of\n\ 2838 \032 synchronization depends on permissions of the owner and group of Unison\n\ 2839 \032 process (Unison must have permissions to set ACL) and the compatibility\n\ 2840 \032 of ACL types on both replicas.\n\ 2841 \n\ 2842 \032 An ACL is propagated as a single unit, with all ACEs. There is no\n\ 2843 \032 merging of ACEs from the replicas.\n\ 2844 \n\ 2845 \032 Caveat: ACE inheritance may in certain scenarios cause synchronization\n\ 2846 \032 inconsistencies. In Windows, only explicit ACEs are synchronized;\n\ 2847 \032 inherited ACEs are not actively synchronized, but Windows will\n\ 2848 \032 propagate ACEs from parent directories (unless inheritance is\n\ 2849 \032 explicitly prevented on a file or a directory\226\128\148this prevention is also\n\ 2850 \032 synchronized). Due to inheritance, the ultimately effective ACL may be\n\ 2851 \032 different, or provide different access, even after synchronization.\n\ 2852 \n\ 2853 \032 Unison currently supports the following platforms and ACL types:\n\ 2854 \032 * Windows (Windows XP SP2 and later)\n\ 2855 \032 + NTFS ACL (discrete ACL (DACL) only)\n\ 2856 \032 * Solaris, OpenSolaris and illumos-based OS (OpenIndiana, SmartOS,\n\ 2857 \032 OmniOS, etc.)\n\ 2858 \032 + NFSv4 ACL (ZFS ACL)\n\ 2859 \032 + POSIX-draft ACL\n\ 2860 \032 + Some NFSv4 ACL (ZFS ACL) cross-synchronization with\n\ 2861 \032 POSIX-draft ACL\n\ 2862 \032 + Full cross-synchronization with other platforms that support\n\ 2863 \032 NFSv4 ACLs; limited cross-synchronization with POSIX-draft\n\ 2864 \032 ACLs\n\ 2865 \032 * FreeBSD, NetBSD\n\ 2866 \032 + NFSv4 ACL (ZFS ACL)\n\ 2867 \032 + Limited POSIX-draft ACL (access ACL only; not default ACL)\n\ 2868 \032 + Full cross-synchronization with other platforms that support\n\ 2869 \032 NFSv4 ACLs\n\ 2870 \032 * Darwin (macOS)\n\ 2871 \032 + Extended ACL\n\ 2872 \n\ 2873 \032 Not all filesystems on the listed platforms support all ACL types (or\n\ 2874 \032 any ACLs at all).\n\ 2875 \n\ 2876 \032 Synchronizing POSIX ACLs on Linux is not supported directly. However,\n\ 2877 \032 it is possible to synchronize these ACLs with another Linux system by\n\ 2878 \032 synchronizing extended attributes (xattrs) instead, because POSIX ACLs\n\ 2879 \032 are stored as xattrs by Linux. This is disabled by default (see the\n\ 2880 \032 section \226\128\156Extended Attributes - xattrs\226\128\157 ). A simple way to enable\n\ 2881 \032 syncing POSIX ACLs on Linux is to enable the preference xattrs and add\n\ 2882 \032 a preference xattrignorenot with a value Path !system.posix_acl_*. The\n\ 2883 \032 * will be expanded to include both posix_acl_access and\n\ 2884 \032 posix_acl_default attributes \226\128\147 if you only want to sync either one,\n\ 2885 \032 just remove the * and type out the attribute name in full. If you want\n\ 2886 \032 to prevent other xattrs from being synced then add an xattrignore with\n\ 2887 \032 a value Path * (value Regex .* will also work).\n\ 2888 \n\ 2889 Extended Attributes - xattrs\n\ 2890 \n\ 2891 \032 Unison allows synchronizing extended attributes on platforms and\n\ 2892 \032 filesystems that support them. System attributes are not synchronized.\n\ 2893 \032 What exactly is considered a system attribute is platform-dependent.\n\ 2894 \032 Synchronization is possible cross-platform, but see caveats below.\n\ 2895 \n\ 2896 \032 If one of the replicas does not support extended attributes then Unison\n\ 2897 \032 will not attempt attribute synchronization. If the other replica does\n\ 2898 \032 support extended attributes then those will remain intact.\n\ 2899 \n\ 2900 \032 If both replicas support extended attributes then you can request\n\ 2901 \032 Unison to try attribute synchronization (xattrs preference). Extended\n\ 2902 \032 attributes from both replicas will not be merged, all extended\n\ 2903 \032 attributes are propagated as a set from one replica to another.\n\ 2904 \n\ 2905 \032 Unison currently supports extended attributes on the following\n\ 2906 \032 platforms:\n\ 2907 \032 * Linux Attributes in user, trusted and security namespaces.\n\ 2908 \032 Synchronization of the latter two namespaces depends on unison\n\ 2909 \032 process privileges and is disabled by default. To sync one or more\n\ 2910 \032 attributes in the security namespace, for example, you can set the\n\ 2911 \032 preference xattrignorenot to Path !security.* (for all) or to Path\n\ 2912 \032 !security.selinux (for one specific attribute). Attributes in\n\ 2913 \032 system namespace are not synchronized, with the exception of\n\ 2914 \032 system.posix_acl_default and system.posix_acl_access (also disabled\n\ 2915 \032 by default).\n\ 2916 \032 * Solaris, OpenSolaris and illumos-based OS (OpenIndiana, SmartOS,\n\ 2917 \032 OmniOS, etc.)\n\ 2918 \032 * FreeBSD, NetBSD Attributes in user namespace.\n\ 2919 \032 * Darwin (macOS)\n\ 2920 \n\ 2921 \032 Not all filesystems on the listed platforms may support extended\n\ 2922 \032 attributes.\n\ 2923 \n\ 2924 \032 Caveats:\n\ 2925 \032 * Some platforms and file systems support very large extended\n\ 2926 \032 attribute values. Unison synchronizes only up to 16 MB of each\n\ 2927 \032 attribute value.\n\ 2928 \032 * Attributes are synchronized as simple name-value pairs. More\n\ 2929 \032 complex extended attribute concepts supported by some platforms are\n\ 2930 \032 not synchronized.\n\ 2931 \032 * On Linux, attribute names always have a fully qualified form\n\ 2932 \032 (namespace.attribute). Other platforms do not have the same\n\ 2933 \032 constraint. The consequence of this is that Unison will sync the\n\ 2934 \032 attribute names on Linux as follows: an ! is prepended to the\n\ 2935 \032 namespace name, except for the user namespace; the user. prefix is\n\ 2936 \032 stripped from attribute names instead. This allows syncing extended\n\ 2937 \032 attributes from Linux to other platforms. These transformations are\n\ 2938 \032 reversed when syncing to Linux, resulting in correct fully\n\ 2939 \032 qualified attribute names. The xattrignore and xattrignorenot\n\ 2940 \032 preferences work on the transformed attribute names. This means\n\ 2941 \032 that any patterns for the user namespace must be specified without\n\ 2942 \032 the user. prefix and any patterns intended for other namespaces\n\ 2943 \032 must begin with an !.\n\ 2944 \n\ 2945 \032 The xattrignore preference can be used to filter the names of extended\n\ 2946 \032 attributes that will be synchronized. The most useful ignore patterns\n\ 2947 \032 can be constructed with the Path form (where shell wildcards * and ?\n\ 2948 \032 are supported) and with the Regex form. The xattrignorenot preference\n\ 2949 \032 can be used to override xattrignore.\n\ 2950 \n\ 2951 \032 Disabling the security and trusted namespaces on Linux is achieved by\n\ 2952 \032 setting a default xattrignore pattern of Regex\n\ 2953 \032 !(security|trusted)[.].*. Disabling the syncing of attributes used to\n\ 2954 \032 store POSIX ACL on Linux is achieved by setting a default xattrignore\n\ 2955 \032 pattern of Path !system.posix_acl_*.\n\ 2956 \n\ 2957 Cross-Platform Synchronization\n\ 2958 \n\ 2959 \032 If you use Unison to synchronize files between Windows and Unix\n\ 2960 \032 systems, there are a few special issues to be aware of.\n\ 2961 \n\ 2962 \032 Case conflicts. In Unix, filenames are case sensitive: foo and FOO can\n\ 2963 \032 refer to different files. In Windows, on the other hand, filenames are\n\ 2964 \032 not case sensitive: foo and FOO can only refer to the same file. This\n\ 2965 \032 means that a Unix foo and FOO cannot be synchronized onto a Windows\n\ 2966 \032 system \226\128\148 Windows won\226\128\153t allow two different files to have the \226\128\156same\226\128\157\n\ 2967 \032 name. Unison detects this situation for you, and reports that it cannot\n\ 2968 \032 synchronize the files.\n\ 2969 \n\ 2970 \032 You can deal with a case conflict in a couple of ways. If you need to\n\ 2971 \032 have both files on the Windows system, your only choice is to rename\n\ 2972 \032 one of the Unix files to avoid the case conflict, and re-synchronize.\n\ 2973 \032 If you don\226\128\153t need the files on the Windows system, you can simply\n\ 2974 \032 disregard Unison\226\128\153s warning message, and go ahead with the\n\ 2975 \032 synchronization; Unison won\226\128\153t touch those files. If you don\226\128\153t want to\n\ 2976 \032 see the warning on each synchronization, you can tell Unison to ignore\n\ 2977 \032 the files (see the section \226\128\156Ignoring Paths\226\128\157 ).\n\ 2978 \n\ 2979 \032 Illegal filenames. Unix allows some filenames that are illegal in\n\ 2980 \032 Windows. For example, colons (\226\128\152:\226\128\153) are not allowed in Windows\n\ 2981 \032 filenames, but they are legal in Unix filenames. This means that a Unix\n\ 2982 \032 file foo:bar can\226\128\153t be synchronized to a Windows system. As with case\n\ 2983 \032 conflicts, Unison detects this situation for you, and you have the same\n\ 2984 \032 options: you can either rename the Unix file and re-synchronize, or you\n\ 2985 \032 can ignore it.\n\ 2986 \n\ 2987 Slow Links\n\ 2988 \n\ 2989 \032 Unison is built to run well even over relatively slow links such as\n\ 2990 \032 modems and DSL connections.\n\ 2991 \n\ 2992 \032 Unison uses the \226\128\156rsync protocol\226\128\157 designed by Andrew Tridgell and Paul\n\ 2993 \032 Mackerras to greatly speed up transfers of large files in which only\n\ 2994 \032 small changes have been made. More information about the rsync protocol\n\ 2995 \032 can be found at the rsync web site (http://samba.anu.edu.au/rsync/).\n\ 2996 \n\ 2997 \032 If you are using Unison with ssh, you may get some speed improvement by\n\ 2998 \032 enabling ssh\226\128\153s compression feature. Do this by adding the option\n\ 2999 \032 \226\128\156-sshargs -C\226\128\157 to the command line or \226\128\156sshargs = -C\226\128\157 to your profile.\n\ 3000 \n\ 3001 Making Unison Faster on Large Files\n\ 3002 \n\ 3003 \032 Unison\226\128\153s built-in implementation of the rsync algorithm makes\n\ 3004 \032 transferring updates to existing files pretty fast. However, for\n\ 3005 \032 whole-file copies of newly created files, the built-in transfer method\n\ 3006 \032 is not highly optimized. Also, if Unison is interrupted in the middle\n\ 3007 \032 of transferring a large file, it will attempt to retransfer the whole\n\ 3008 \032 thing on the next run.\n\ 3009 \n\ 3010 \032 These shortcomings can be addressed with a little extra work by telling\n\ 3011 \032 Unison to use an external file copying utility for whole-file\n\ 3012 \032 transfers. The recommended one is the standalone rsync tool, which is\n\ 3013 \032 available by default on most Unix systems and can easily be installed\n\ 3014 \032 on Windows systems using Cygwin.\n\ 3015 \n\ 3016 \032 If you have rsync installed on both hosts, you can make Unison use it\n\ 3017 \032 simply by setting the copythreshold flag to something non-negative. If\n\ 3018 \032 you set it to 0, Unison will use the external copy utility for all\n\ 3019 \032 whole-file transfers. (This is probably slower than letting Unison copy\n\ 3020 \032 small files by itself, but can be useful for testing.) If you set it to\n\ 3021 \032 a larger value, Unison will use the external utility for all files\n\ 3022 \032 larger than this size (which is given in kilobytes, so setting it to\n\ 3023 \032 1000 will cause the external tool to be used for all transfers larger\n\ 3024 \032 than a megabyte).\n\ 3025 \n\ 3026 \032 If you want to use a different external copy utility, set both the\n\ 3027 \032 copyprog and copyprogrest preferences\226\128\148the former is used for the first\n\ 3028 \032 transfer of a file, while the latter is used when Unison sees a\n\ 3029 \032 partially transferred temp file on the receiving host. Be careful here:\n\ 3030 \032 Your external tool needs to be instructed to copy files in place\n\ 3031 \032 (otherwise if the transfer is interrupted Unison will not notice that\n\ 3032 \032 some of the data has already been transferred, the next time it tries).\n\ 3033 \032 The default values are:\n\ 3034 \032 copyprog = rsync --inplace --compress\n\ 3035 \032 copyprogrest = rsync --partial --inplace --compress\n\ 3036 \n\ 3037 \032 If a directory transfer is interrupted, the next run of Unison will\n\ 3038 \032 automatically skip any files that were completely transferred before\n\ 3039 \032 the interruption. (This behavior is always on: it does not depend on\n\ 3040 \032 the setting of the copythreshold preference.) Note, though, that the\n\ 3041 \032 new directory will not appear in the destination filesystem until\n\ 3042 \032 everything has been transferred\226\128\148partially transferred directories are\n\ 3043 \032 kept in a temporary location (with names like .unison.DIRNAME....)\n\ 3044 \032 until the transfer is complete.\n\ 3045 \n\ 3046 Fast Update Detection\n\ 3047 \n\ 3048 \032 If your replicas are large and at least one of them is on a Windows\n\ 3049 \032 system, you may find that Unison\226\128\153s default method for detecting changes\n\ 3050 \032 (which involves scanning the full contents of every file on every\n\ 3051 \032 sync\226\128\148the only completely safe way to do it under Windows) is too slow.\n\ 3052 \032 Unison provides a preference fastcheck that, when set to true, causes\n\ 3053 \032 it to use file creation times as \226\128\153pseudo inode numbers\226\128\153 when scanning\n\ 3054 \032 replicas for updates, instead of reading the full contents of every\n\ 3055 \032 file.\n\ 3056 \n\ 3057 \032 When fastcheck is set to no, Unison will perform slow\n\ 3058 \032 checking\226\128\148re-scanning the contents of each file on each\n\ 3059 \032 synchronization\226\128\148on all replicas. When fastcheck is set to default\n\ 3060 \032 (which, naturally, is the default), Unison will use fast checks on Unix\n\ 3061 \032 replicas and slow checks on Windows replicas.\n\ 3062 \n\ 3063 \032 This strategy may cause Unison to miss propagating an update if the\n\ 3064 \032 modification time and length of the file are both unchanged by the\n\ 3065 \032 update. However, Unison will never overwrite such an update with a\n\ 3066 \032 change from the other replica, since it always does a safe check for\n\ 3067 \032 updates just before propagating a change. Thus, it is reasonable to use\n\ 3068 \032 this switch most of the time and occasionally run Unison once with\n\ 3069 \032 fastcheck set to no, if you are worried that Unison may have overlooked\n\ 3070 \032 an update.\n\ 3071 \n\ 3072 \032 Fastcheck is (always) automatically disabled for files with extension\n\ 3073 \032 .xls or .mpp, to prevent Unison from being confused by the habits of\n\ 3074 \032 certain programs (Excel, in particular) of updating files without\n\ 3075 \032 changing their modification times.\n\ 3076 \n\ 3077 Mount Points and Removable Media\n\ 3078 \n\ 3079 \032 Using Unison removable media such as USB drives can be dangerous unless\n\ 3080 \032 you are careful. If you synchronize a directory that is stored on\n\ 3081 \032 removable media when the media is not present, it will look to Unison\n\ 3082 \032 as though the whole directory has been deleted, and it will proceed to\n\ 3083 \032 delete the directory from the other replica\226\128\148probably not what you want!\n\ 3084 \n\ 3085 \032 To prevent accidents, Unison provides a preference called mountpoint.\n\ 3086 \032 Including a line like\n\ 3087 \032 mountpoint = foo\n\ 3088 \n\ 3089 \032 in your preference file will cause Unison to check, after it finishes\n\ 3090 \032 detecting updates, that something actually exists at the path foo on\n\ 3091 \032 both replicas; if it does not, the Unison run will abort.\n\ 3092 \n\ 3093 ")) 3094 :: 3095 ("", ("Junk", 3096 "Junk\n\ 3097 \032 __________________________________________________________________\n\ 3098 \n\ 3099 \032 This document was translated from L^AT[E]X by [1]H^EV^EA.\n\ 3100 \n\ 3101 References\n\ 3102 \n\ 3103 \032 1. http://hevea.inria.fr/index.html\n\ 3104 ")) 3105 :: 3106 [];; 3107