哪些文件属性会被同步:元数据的同步边界清单
官方清单:三类状态
官方 FAQ 的「What things are synced?」给出了精确到属性级的答案,分三类。
总是同步
- 文件内容;
- 文件修改时间——所以对端拿到的文件时间戳与源头一致。
视情况同步(取决于文件系统与设置)
- 文件权限(文件系统支持时;Windows 上只同步「只读」这一位);
- 符号链接(Windows 除外;且从不跟随——链接本身被同步,指向目标不因链接而被复制);
- 文件/目录的所有者与组(开启同步所有权时);
- 扩展属性 xattr(开启时;POSIX/NFS ACL 作为扩展属性的一部分)。
从不同步
- 目录的修改时间(不保留);
- 硬链接(会被跟随读取,但链接关系不保留——多路径指向同 inode 时变成多份独立副本);
- Windows junction(默认当普通目录内容同步,需在文件夹配置里显式开启 junctionsAsDirs);
- 资源 fork、Windows ACL;
- 设备文件、FIFO 等特殊文件(直接忽略);
- 稀疏文件的稀疏性(同步后视 OS/文件系统支持而恢复);
- 程序自身的内部文件:
.stfolder、.stignore、.stversions、临时文件等。
平台差异的现实
官方提醒:能不能同步往往取决于操作系统与文件系统。典型例子:Android 用户存储不支持符号链接,即使协议层在同步链接,落到 Android 上也会失败。
对实际使用的含义
- 跨 Windows 与 Linux 混用:别指望权限位精确一致;大小写问题另见[冲突副本(../06-版本与冲突/04-conflicts.md);
- 代码仓库同步:
.git目录建议整体加入忽略——对象库里的硬链接/锁定文件边界行为容易出问题,仓库用代码托管服务更稳; - 时间敏感场景(照片整理、归档):修改时间会保留,目录时间不会——按文件排序无碍,按目录排序要留意。
需要让某些内容「根本不进入同步范围」时,用忽略规则实现,见[.stignore 入门(01-stignore-basics.md)。