如何用Unison合并两台NFS服务器上的冲突文件?
解决Unison同步时无法合并txt文件的问题
问题根源
你当前的Unison配置里,merge项只指定了要合并的文件路径,但没有定义具体的合并工具/命令,这就是报错'merge' preference not set for hello.txt的原因。Unison需要明确知道遇到冲突文件时用什么工具来合并。
解决步骤
1. 确保两台服务器都安装diff3
Unison常用diff3作为合并工具,先在两台服务器上执行安装命令:
sudo apt update && sudo apt install diffutils -y
2. 修正sync.prf的merge配置
把原配置里的merge = Name /home/ubuntu/nfs/*txt替换成以下内容:
root = /home/ubuntu/nfs # shared directory on server1 root = ssh://ubuntu@XX.XX.XX.XX//home/ubuntu/nfs # shared directory on server2 ignore = Name .git # 对所有txt文件使用diff3自动合并 merge = Name *.txt diff3 -m CURRENT OLD NEW > NEW
- 这里的
CURRENT、OLD、NEW是Unison内置变量,会自动替换为对应版本的文件路径:- CURRENT:本地修改后的文件版本
- OLD:同步前的基础版本
- NEW:远程修改后的文件版本
3. 重新运行同步
执行命令重新同步:
unison sync.prf
此时Unison会自动调用diff3合并两台服务器上的hello.txt内容,完成同步。
为什么之前的尝试无效
你之前试的几种配置都不符合Unison的语法规则:
Path /home/ubuntu/nfs = update:Path仅用于指定同步路径,不能直接绑定update操作*.txt update、*.txt = update:属于语法错误,Unison不支持这种写法merge = diff3 -m /home/ubuntu/nfs/*.txt OLD /home/ubuntu/nfs/*txt > NEW:硬编码文件路径无效,必须使用Unison提供的变量,且格式不符合merge项的定义规则
内容的提问来源于stack exchange,提问作者shihack
相关产品推荐
相关产品推荐

