Synchronization 解决冲突时,除少数DIR外,所有DIR均采用一个根
我正在尝试使用在Windows上的主机和Fedora Linux上的来宾VM之间同步文件 我希望自动管理所有冲突:Synchronization 解决冲突时,除少数DIR外,所有DIR均采用一个根,synchronization,unison,Synchronization,Unison,我正在尝试使用在Windows上的主机和Fedora Linux上的来宾VM之间同步文件 我希望自动管理所有冲突: 默认情况下,所有冲突都必须以有利于主机(Windows)的方式解决 一些选定的DIR必须以有利于客人(Fedora)的方式解决 这是我的default.prf文件: root = c:\www root = socket://192.168.40.100:9999//home/ben/www # only synchronize these dirs path = site
- 默认情况下,所有冲突都必须以有利于主机(Windows)的方式解决
- 一些选定的DIR必须以有利于客人(Fedora)的方式解决
default.prf
文件:
root = c:\www
root = socket://192.168.40.100:9999//home/ben/www
# only synchronize these dirs
path = site1.com
path = site2.com
# do not synchronize PHPStorm's config
ignore = Name .idea
# resolve conflicts in favour of the host by default
prefer = c:\www
# resolve directories managed by CLI commands on the guest in favour of the guest
preferpartial = BelowPath site1.com/node_modules -> socket://192.168.40.100:9999//home/ben/www
preferpartial = BelowPath site1.com/public/build -> socket://192.168.40.100:9999//home/ben/www
preferpartial = BelowPath site1.com/var -> socket://192.168.40.100:9999//home/ben/www
preferpartial = BelowPath site1.com/vendor -> socket://192.168.40.100:9999//home/ben/www
preferpartial = BelowPath site2.com/node_modules -> socket://192.168.40.100:9999//home/ben/www
preferpartial = BelowPath site2.com/vendor -> socket://192.168.40.100:9999//home/ben/www
# automatically accept default (nonconflicting) actions
auto = true
# don't keep backup copies
backups = false
# batch mode: ask no questions at all
batch = true
# synchronize continuously (watch for changes)
repeat = watch
上述配置根本不起作用:当我在主机和来宾、在preferpartial
目录内外创建冲突文件时,冲突要么全部以来宾的身份解决,要么全部以主机的身份解决
(我已经设置了一个测试脚本,在该脚本中,我创建了包含“主机”或“来宾”内容的冲突文件,启动Unison,然后在Unison完成同步后cat
这些文件)
我做错了什么?我在仔细阅读了这些文档,并进行了大量的尝试和错误分析后,终于找到了答案 我的上述配置正常。 我的问题是,每当我运行
Unison
命令时,我都希望Unison从一个新的空白状态开始,并且每次都将我的文件检测为冲突。事实并非如此:Unison保存了一个同步文件的内部存档,这在像我这样执行测试时可能会产生误导
因此,尽管每次我都用冲突的值覆盖两侧的文件,但我总是将相同的内容(“主机”或“来宾”)写入这些文件。启动时,Unison将文件的内容与其存档进行比较,结果发现,即使修改时间已更新,某些文件的内容仍没有更改:当我向文件写入“主机”或“来宾”时,其中一些文件已具有此值
因此,在这种情况下,Unison仅检测到一个方向上的更改,因此会将其传播到另一端,而不是运行冲突解决算法
我想这是有道理的,在正常情况下,这将是预期的行为
也就是说,我能够通过两种独立的方式成功验证我的配置:
- 方法1:通过设置
;这是可行的,但启动同步需要5倍以上的时间;或者,删除两侧ignorearchives=true来忽略启动时的现有存档文件
目录下的存档也可以.unison
- 方法2:在执行测试时,确保我向文件写入唯一的内容,以强制Unison将其检测为冲突;为此,我替换了:
与:echo "HOST" > site1.com/conflict1
Preference
规则
echo "HOST @ $(date)" > site1.com/conflict