macOS 交付物卫生
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3525f922/avoiding-macos-junk-files 到你的 AI 助手。
技能介绍
要解决的问题
macOS 在 Finder 操作中会悄悄给文件附加 .DS_Store、._* AppleDouble、__MACOSX 目录、资源叉和 com.apple.metadata:* 扩展属性。这些元数据一旦混入复制、Git 提交、CI 产物、SCP 传输或归档,交付物就被污染:跨平台同事拉到 ._foo.js,CI 归档里夹带资源叉记录,干净仓库的 git status 突然多出一堆无用变更。.gitignore 挡不住已跟踪文件、Hook 和 SCP 暂存区;Finder 的"压缩"也不会替你清理这些内容。
技能如何工作
该技能围绕随附的 scripts/macos_hygiene.py CLI 组织,默认只检查、不改动:
scan:扫描工作区;--format json输出机器可读结果,--xattrs显式读取会随传输进入载荷的FinderInfo、ResourceFork与com.apple.metadata:*clean:先预览,仅在用户明确授权后加--apply清理高置信垃圾;不确定项转人工复核,不擅自删除check-git --scope all:覆盖工作区、暂存区和已跟踪路径install-repo-guard --ci both:安装本地 Hook、仓库内工具与 CI 模板(GitHub Actions / GitLab CI,Python 3.11 与 3.14 矩阵);Hook 可被--no-verify绕过,CI 门禁才是硬约束stage --manifest/scp --manifest-out:构造无污染传输副本并生成 SHA-256 审计清单archive create/archive verify:验证归档完整性、危险路径/链接、资源上限和元数据污染
退出码语义明确:0 通过、1 发现策略违规、2 运行错误,可直接用于流水线阻断。
适用边界
- 目标是交付物卫生,不是让本机磁盘永不产生元数据;工具不改全局配置和用户 Shell 配置
- CI 上必须按环境收紧
--max-members、--max-total-bytes、--max-member-bytes、--max-compression-ratio等归档上限 - 归档验收只检查 ZIP/TAR 内部成员路径与属性记录,宿主文件的文件系统 xattr 不属于归档内容
com.apple.provenance等宿主层属性不等同于载荷污染,需存储或传输端另行治理- 无法防御同 UID 的恶意本地进程;发布前应确认扫描、
check-git、暂存清单与归档验证均返回 0,CI 失败时阻断流水线
使用场景
- macOS 开发者发布前用 scan --xattrs 清理 .DS_Store、._*、__MACOSX,并用 check-git --scope all 阻断污染提交。
- 维护 GitHub Actions/GitLab CI 的工程师用 install-repo-guard --ci both 在 Python 矩阵运行检查,合并前阻断违规。
- 通过 SCP 向外部交付文件的工程师使用 scp --manifest-out 生成无污染传输包和 SHA-256 审计清单。
- 发布软件或数据集的工程师用 archive create/verify 在 CI 限制下验证 ZIP/TAR 完整性、路径和元数据污染。
适合人员
- 在 macOS 上开发、使用 Git 与 CI 的开发者,需要提交和发布不含 macOS 元数据的干净代码与制品。
- 使用 macOS 配合 GitHub Actions 或 GitLab CI 的工程师,需要在 Python 矩阵中复现并强制执行交付检查。
- 负责跨平台文件传输、SCP 交付或归档发布的工程师,需要可审计、可复核的无污染传输包。
- 平台或 DevOps 工程师,需要以明确退出码和门禁阻断策略违规,并保留流水线验收证据。