Python Git预提交钩子一直在修改文件,即使在我将以前修改过的文件暂存之后也是如此

Python Git预提交钩子一直在修改文件,即使在我将以前修改过的文件暂存之后也是如此,python,git,pre-commit,pre-commit.com,python-black,Python,Git,Pre Commit,Pre Commit.com,Python Black,我在用git和black作为一个钩子 现在,当我运行commit时,black失败并说: 全部完成!✨ 看起来您正在同时使用黑色和双引号字符串修复器 前者喜欢python中的双引号字符串(您可以通过在pyproject.toml中将black配置为跳过字符串规范化来禁用此功能) 后者喜欢python中的单引号字符串(如果喜欢双引号字符串,可以将其删除) 如果两个格式化程序发生冲突,最终的结果将是预提交检查失败,以确保所有问题都得到解决 免责声明:我是pre-commit和pre-comm

我在用git和black作为一个钩子

现在,当我运行
commit
时,black失败并说:


全部完成!✨  看起来您正在同时使用
黑色
双引号字符串修复器

  • 前者喜欢python中的双引号字符串(您可以通过在
    pyproject.toml
    中将black配置为
    跳过字符串规范化来禁用此功能)
  • 后者喜欢python中的单引号字符串(如果喜欢双引号字符串,可以将其删除)
如果两个格式化程序发生冲突,最终的结果将是预提交检查失败,以确保所有问题都得到解决



免责声明:我是pre-commit和pre-commit hook的作者

嗯,在提交文件之前,你必须添加文件。git status--short
说什么?让任何预提交钩子尝试修改要提交的内容通常是不明智的。您正在使用的pre-commit包程序中有专门的代码来尝试处理此问题,但是在某些情况下,它太难(
git-commit--only
)并且会出错。最好只使用一个预提交钩子来验证提交是否正常,如果不正常,请告诉您应该做些什么来修复它,以避免这些极端情况。也就是说,不清楚为什么您会看到您正在看到的内容,但我自己没有使用这个预提交包。也许在您的工作树中根本没有进行重新格式化。(软件包小心地将暂存文件提取到临时目录,这是处理Git从其索引而不是从工作树提交的唯一明智的方法。)您能提供更多信息和提交的输出吗?我猜你有两个钩子,它们对某些东西的格式不一致(
isort
black
可能?)嗨@MCI,我已经在问题中添加了请求的详细信息。预提交(程序,而不是Git钩子:-)-名称这样混淆了!)这方面非常聪明,自动检测更改的文件。我建议在这种特殊情况下,让它更详细一些:比如说,让它说一些类似“格式化程序X和Y都试图改变,但我们无法决定该怎么做”的话!是的,这就是问题所在,我将“双引号字符串修复器”误解为强制使用双引号,因为这是我最常用的方法。感谢您的回复@AnthonySottile@torek是的,那很好,但不幸的是,很难知道是什么改变了,而且有两件事是不一致的——我一直在考虑改进这一点,但目前它只是对差异进行了不透明的处理