VScode(WSL)环境Ruby项目提交时文件莫名标记变更的技术问询
WSL下VSCode开发Ruby项目文件权限变更问题解决方案
A) 如何查明文件的具体变更内容?
- 用Git查看权限变更:执行
git diff,如果看不到权限变化,先检查Git权限追踪配置:- 运行
git config core.filemode,若输出为false,执行git config core.filemode true开启权限追踪,再次运行git diff就能看到权限从100755(可执行)变为100644(不可执行)的记录。
- 运行
- 对比本地与仓库权限:
- 查看本地文件权限:
ls -l bin/ release-tasks.sh - 查看仓库中记录的权限:
git ls-tree HEAD -- bin/bundle(替换为对应文件名),输出字段的前7位中前三位即为权限值(如100755)。
- 查看本地文件权限:
B) 如何阻止VSCode标记变更并避免修改文件?
方案1:让Git忽略权限变更
- 仅当前项目生效:在项目根目录执行
git config core.filemode false,Git将不再追踪任何文件的权限变化,适合团队统一配置场景。 - 全局生效:执行
git config --global core.filemode false,对所有本地Git仓库生效,个人开发环境推荐使用。
方案2:禁止VSCode触碰目标文件
- 配置VSCode忽略文件监控:打开VSCode的
settings.json(快捷键Ctrl+,后点击右上角打开设置文件),添加以下配置,阻止VSCode监控这些文件的变化:"files.watcherExclude": { "**/bin/bundle": true, "**/bin/dev": true, "**/bin/rails": true, "**/bin/rake": true, "**/bin/rubocop": true, "**/bin/rubycritic": true, "**/bin/setup": true, "**/release-tasks.sh": true } - 检查扩展设置:查看已安装的Ruby相关扩展(如Ruby LSP、Ruby等),确认是否存在自动修改文件权限或格式化的设置,关闭对应选项。
方案3:锁定文件状态
- 恢复仓库原始权限:执行
git checkout HEAD -- bin/bundle bin/dev bin/rails bin/rake bin/rubocop bin/rubycritic bin/setup release-tasks.sh,将文件权限恢复为仓库记录的100755。 - 手动设置执行权限:若恢复后权限仍不对,运行
chmod +x bin/* release-tasks.sh重新赋予可执行权限。 - 让Git忽略该文件的所有变更:执行
git update-index --assume-unchanged <文件名>(如git update-index --assume-unchanged bin/bundle),Git将不再追踪该文件的任何改动。注意:若仓库中该文件有更新,需先执行git update-index --no-assume-unchanged <文件名>取消锁定,才能拉取更新。
内容的提问来源于stack exchange,提问作者Nick Fleetwood
相关产品推荐
相关产品推荐

