有两树A B相同,如果A的文件p(记做p/A)存在,则B的文件p(记做p/B)也存在且相同(内容,属性,type,文件p得许可,文件p的大小,和p的最后修改时间),当一个文件两边都被修改,则不能同步,有冲突。文件同步器操作两个树文件A B,和一个包含了最后成功同步的日志文件,日志文件储存在例如$HOME/.synchro,包含A B的路径,此外,为了每个文件p/A=p/B同步无冲突,日志文件还包含了路径p ,type,文件p得许可,文件p的大小,和p的最后修改时间。我们说当在日志文件中存在一个p的入口时,文件p/A遵循日志,且文件p/A与日志中存贮的有相同的模式大小,最后修改时间
3简单同步
同步器平行遍历树A和树B,对整个路径p进行下列操作:
如果,p/A是目录,p/B是普通文件,或相反,就有冲突
如果不是,如果p/A ,p/B都是目录,循环结束
如果不是,如果p/A, p/B都是普通文件,且模式大小最后修改时间相同,同步成功,不做任何事
如果不是,如果p/A遵循日志文件,p/B不遵循,后者被改变,就必须复制P/A的内容,模式,最后修改时间给p/B。反之则反。
如果不是,如果p/A, p/B都是普通文件,且都不遵循日志文件(可能是没p的入口,可能是两文件的属性不对应),有冲突
同步器重写日志文件:
要注意两树不一定在文件系统有相同的出现顺序,可能A中有文件p q 然而B中有文件q p,你来决定你想把目录存在日志文件或愿意创造一份文件放目录,也由你来决定如何管理冲突,我们可以每次同步时简单地显示冲突列表,可以要求用户做选择。如果这些文件是TXT文件,可以显示2个文件的不同(例如使用命令diff)
3内容对比
如果文件同时在两边已修改相同内容,同步器指出一个假的冲突,为显示出两个普通文件的冲突,同步器对比两文件的内容,如果相同:
如果两文件属性已经相同,不做任何事,同步成功
如果其中一个的属性与日志文件的相同,另一个改变过,只要改变第一个的属性,同步成功
如果属性不同,两文件有冲突,但只是属性不同,也许让用户知道后可以使用它
当然,在上面任何一种同步成功情况,必须将结果存在日志文件中
可以用rsync和sync
3简单同步
同步器平行遍历树A和树B,对整个路径p进行下列操作:
如果,p/A是目录,p/B是普通文件,或相反,就有冲突
如果不是,如果p/A ,p/B都是目录,循环结束
如果不是,如果p/A, p/B都是普通文件,且模式大小最后修改时间相同,同步成功,不做任何事
如果不是,如果p/A遵循日志文件,p/B不遵循,后者被改变,就必须复制P/A的内容,模式,最后修改时间给p/B。反之则反。
如果不是,如果p/A, p/B都是普通文件,且都不遵循日志文件(可能是没p的入口,可能是两文件的属性不对应),有冲突
同步器重写日志文件:
要注意两树不一定在文件系统有相同的出现顺序,可能A中有文件p q 然而B中有文件q p,你来决定你想把目录存在日志文件或愿意创造一份文件放目录,也由你来决定如何管理冲突,我们可以每次同步时简单地显示冲突列表,可以要求用户做选择。如果这些文件是TXT文件,可以显示2个文件的不同(例如使用命令diff)
3内容对比
如果文件同时在两边已修改相同内容,同步器指出一个假的冲突,为显示出两个普通文件的冲突,同步器对比两文件的内容,如果相同:
如果两文件属性已经相同,不做任何事,同步成功
如果其中一个的属性与日志文件的相同,另一个改变过,只要改变第一个的属性,同步成功
如果属性不同,两文件有冲突,但只是属性不同,也许让用户知道后可以使用它
当然,在上面任何一种同步成功情况,必须将结果存在日志文件中
可以用rsync和sync