2

我开始使用 Prettier + eslint 使用pretty-quick& husky选项 2)。它的行为符合预期,即在提交(或修改)期间重新格式化代码并在提交中包含更改。

我的 monorepo 需要(几个)更多的预提交钩子,所以我最终迁移到了pre-commit.com(选项 3)。现在,当我提交或修改时,Prettier 会修改文件并返回Failed状态。这造成了一个相当烦人的工作流程,我被迫添加文件并尝试再次提交更改。

作为提交的一部分,是否有某种方法可以将更改重新分阶段?

4

3 回答 3

4

pre-commit 故意从不涉及暂存区域。默默地改变正在提交的内容是危险的。该工具总是让您有机会在提交之前验证钩子的作用

您可以在问题跟踪器中阅读更多相关信息:

如果您想立即启动,我的建议是git add -u && !!之后立即运行——这将暂存更改的文件并重新运行您刚刚运行的命令

如果您想冒险进入不受支持的领域,您可以将其作为命令的一部分运行(如其中一个问题所示)——但这巧妙地破坏了该工具的许多保证

  - id: yapf
    entry: bash -c 'yapf "$@"; git add -u' --

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

于 2020-10-11T23:02:48.340 回答
2

我相信我的哥哥,Pre-commit 的创建者会确认这一点,但这是 pre-commit 的预期行为。它应该会失败,因为它正在直接修改您的文件。实际上,我为自己使用了 Prettier 的精确设置,虽然它很烦人,但这只是你必须改变的事情之一。我喜欢制作一个名为“格式”的 git commit -m 或其他东西,然后提交实际更改。

编辑:他在我回答之前就狙击了我,他的回答更深入

于 2020-10-11T23:04:20.367 回答
0

假设您了解上面给出的不盲目这样做的原因,我想分享一个我为美妙的他妈的编写的简单规则脚本,它会自动更新暂存区域并重试提交命令。

因此,用法如下所示:

$ git commit -m "..."
[pre-commit modifies some files and abort the commit]
$ fuck
于 2021-05-19T03:52:08.720 回答