使用git-filter-repo的lint-history处理提交时遇错误中断的解决办法
解决lint-history+Prettier处理历史提交时因冲突符号中断的问题
方案一:让Prettier自动跳过带冲突符号的文件
Prettier没有直接跳过错误文件的参数,但可以写个简单脚本先检查文件内容,再决定是否格式化:
- 新建一个名为
prettier-safe.sh的脚本,内容如下:
#!/bin/bash for file in "$@"; do # 检查文件是否包含合并冲突标记 if grep -q -E '<<<<<<<|=======|>>>>>>>' "$file"; then echo "跳过存在冲突符号的文件: $file" continue fi # 正常执行Prettier格式化 npx prettier -w "$file" done
- 给脚本加执行权限:
chmod +x prettier-safe.sh
- 修改lint-history命令,调用这个脚本:
python lint-history --relevant 'filename.endswith(b".ts")' ./prettier-safe.sh
这样脚本会自动跳过所有带合并冲突符号的.ts文件,不会触发Prettier的语法错误。
方案二:让lint-history忽略Prettier的错误继续执行
直接让Prettier报错时不返回非零退出码,这样lint-history就不会中断流程:
把原命令改成下面这样,用|| true强制让Prettier的错误返回成功状态:
python lint-history --relevant 'filename.endswith(b".ts")' bash -c "prettier -w \"\$@\" || true" --
这里bash -c用来包装Prettier命令,|| true确保即使Prettier格式化失败,整个子进程也返回0,lint-history会继续处理后续提交。
额外:定位并修复有问题的提交
如果想彻底解决问题,先找到出错的提交:
python lint-history --verbose --relevant 'filename.endswith(b".ts")' prettier -w
通过verbose日志找到中断时的提交ID,然后用以下命令查看该提交里的问题文件:
git show <提交ID>:<文件路径>
确认冲突符号后,可以用git-filter-repo先修复该提交的文件内容,再重新执行格式化命令。
内容的提问来源于stack exchange,提问作者Théophile
相关产品推荐
相关产品推荐

