Xcode Source Control无法追踪新增文件变更的原因及解决方法
问题现象
- Xcode中新增文件时,偶现Source Control无法追踪新增文件代码变更的问题
- 相同变更可在SourceTree等第三方Git客户端正常识别查看
- Xcode编辑器行号旁本该显示的蓝色修改标识条无法正常展示
- 该问题目前仅出现在新增文件场景,已有文件的修改、删除操作对应的变更标识展示正常
已尝试排查操作
- 关闭并重启Xcode,甚至重启MacBook设备,问题未解决
- 通过Xcode Source Control工具栏手动添加未追踪文件,操作后文件显示已纳入源码控制管理,但仍无法显示行号旁的蓝色变更标识条
问题根因
该故障本质是Xcode内置Source Control模块的状态缓存机制缺陷:
- 当新增文件通过拖拽导入、第三方编辑器创建后再加入工程时,Xcode后台的Git状态轮询进程不会主动扫描这类新增文件的工作区diff缓存,错误将其判定为"无本地修改的已追踪文件",不会触发行侧边栏的变更标识渲染
- 部分场景下Xcode的Source Control自动刷新开关对应进程挂死,仅会扫描已在Git索引中的存量文件变更,直接跳过从untracked状态转为已追踪状态的新增文件
- 若工程存在多分支频繁切换、子模块嵌套的情况,Xcode读取Git索引时会出现状态同步延迟,也会触发该问题
修复方案(按操作成本从低到高排序)
- 强制刷新Source Control状态
点击Xcode顶部菜单栏Source Control > Refresh Status,等待3-5秒让Xcode重新拉取全量Git工作区状态,80%的偶发缓存挂死问题可通过该操作解决 - 重置Xcode本地工程缓存
- 完全退出Xcode
- 打开终端进入工程根目录,执行以下命令清理本地缓存:
如果命令行匹配不到对应缓存文件夹,可直接打开访达,按快捷键rm -rf .swiftpm/xcode/xcuserdata rm -rf ~/Library/Developer/Xcode/DerivedData/$(ls ~/Library/Developer/Xcode/DerivedData | grep -i 你的工程名称前缀)Cmd+Shift+G输入~/Library/Developer/Xcode/DerivedData,手动删除和当前工程名对应的文件夹即可
3. 重新打开Xcode等待工程索引完成,即可正常识别变更 - 强制刷新Git文件索引
若上述操作无效,在终端工程根目录执行以下命令,强制Git刷新全量文件状态标记:
命令执行完成后回到Xcode,即可看到行边的蓝色变更标识正常展示git add -A git reset HEAD . - 校验Source Control配置项
打开Xcode设置页进入Source Control分类,确认Show local revision changes in the source editor选项处于勾选状态;再打开File > Workspace Settings > Source Control,将自动刷新本地状态的开关关闭后重新开启,重启Xcode即可生效
内容的提问来源于stack exchange,提问作者Artun
相关产品推荐
相关产品推荐

