Xcode或git自动删除仓库内Package.resolved文件是什么原因?
大小写不敏感文件系统冲突
你贴的git status输出中同时出现了大写开头的Whatnot.xcodeproj和小写开头的whatnot.xcodeproj两条路径,macOS默认的APFS文件系统是大小写不敏感的,Git默认在macOS环境下也开启了core.ignorecase=true配置。如果不同分支中项目目录的大小写不一致,合并拉取时Git处理路径冲突失败,就会删除原路径下的Package.resolved文件,同时将小写路径的swiftpm目录标记为未跟踪,和你遇到的现象完全吻合。残留忽略规则的分支合并冲突
你仅在当前分支移除了Package.resolved的忽略规则,如果团队其他成员的本地分支、远端未合并的旧分支还残留了对应的忽略规则,合并这些分支时,Git会将已跟踪的Package.resolved误判为无需跟踪的忽略文件,拉取合并时自动删除该文件,且不会标记为待提交删除状态。项目路径前缀不统一
你们最早提交Package.resolved时用的是Proj.xcodeproj前缀的路径,后续项目改名成Whatnot后,不同分支的路径前缀没有同步更新,合并时Git无法匹配到对应路径下的文件,就会删除旧路径下的Package.resolved,新路径下的文件未被跟踪,就会出现整个swiftpm目录被标记为未跟踪的情况。Xcode自动操作触发的隐性删除
Xcode 13及以上版本会在拉取代码、切换分支后自动解析SPM依赖,如果部分成员的Xcode配置了自动更新Package.resolved、或本地Git私有配置里存在相关忽略规则,Xcode后台修改依赖配置时会自动删除不一致的Package.resolved文件,且不会生成删除提交记录。
- 统一所有活跃分支的项目目录大小写,在仓库根目录执行
git config core.ignorecase false关闭Git的大小写忽略配置,避免后续路径大小写冲突。 - 同步检查所有活跃分支的
.gitignore文件,确认所有分支都已删除Package.resolved的忽略规则,同时排查全局.gitignore、本地.git/config是否存在残留的相关忽略配置。 - 本地执行
git add -f Whatnot.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved强制将文件加入跟踪,提交后同步到所有活跃分支,避免Git误判为忽略文件。 - 统一团队Xcode配置,关闭自动更新SPM依赖版本的选项,执行Git操作前先退出Xcode,避免Xcode后台修改文件导致隐性冲突。
内容的提问来源于stack exchange,提问作者Rick

