如何在 git-hook 中应用 eslint/prettier 自动修复

How to apply eslint/prettier auto-fixes in git-hook

我想知道如何在 git-hook pre-push 阶段应用 eslintprettier 自动修复。 我试过这样的事情:

./node_modules/.bin/eslint index.js --fix
git add .
git commit --amend --no-edit

它修复了我本地存储库中的问题,但没有将其推送到远程。然后在我输入 git status 之后,它被写为我分别有 1 和 1 个不同的提交,我必须使用 git pull 来解决我的问题。这会在回购中产生超级混乱。

你知道我怎样才能做到这一点吗?

你的部分混乱来自 git commit --amend--amend,git 总是 重写 HEAD 提交,所以你的 HEAD 在你有 运行 git push 之后提交将总是与以前不同。

混乱的另一部分是,由于您的钩子 运行s git add .(而不是尝试有选择地选择文件或块),它总是会在您的工作树中添加所有内容。不再为您提供 git add <subdir>/git add -p ... :您的 pre-push 挂钩将始终添加磁盘上的 all


挂钩(pre-commit 和 pre-push)恕我直言,更适合 只读 操作,必要时可以取消操作。

例如:您可以有一个 lint 脚本,具有 check 模式(检查 lint 规则并在不遵守规则时以非零代码退出)和 update 模式(应用规则的已知修复)。请注意,根据您的 linter,某些规则可能仍然需要一些手动操作。

在您的 pre-push 挂钩中使用 check 模式,并可能在脚本中包含 update 模式,该脚本将另外 git add 您的文件;至少,您将 re-gain 有机会在推动之前 审查您所承诺的内容

按照建议,您还可以在服务器端的挂钩中使用 check 模式来拒绝不遵守您选择的 lint 规则的提交。