Git 钩子预提交不起作用

Git hook precommit doesn't working

它是一个 git 预提交挂钩 假设对每个修改(暂存)的文件执行 esformatter 命令,

#!/bin/sh

for fil in $(git diff --name-only --staged | grep ".js"); do
 esformatter -i$ fil & git add $fil;
done

git commit -m "Adding format to files"

其实我希望这段代码在同一次提交中执行,但我不知道该怎么做。 该代码实际上可以工作,直到完成部分。但是这些文件并没有明显地添加到提交中,所以这就是为什么我需要提交部分。

此致

首先想想这是不是你想走的路。即时修改人们的提交,很可能会导致难以理清的混乱局面。

其次,如果您想将更改保留在同一提交中,您只需删除 git commit -m "Adding format to files" 行,这样 githook 就不会进行单独的提交。

如果这不起作用,您可以尝试将其添加为 post-commit 挂钩并执行 git commit --amend

您不是在修改后添加文件。

esformatter -i$ fil & git add $fil

您可能打算在这里使用 &&,而不是 && 将在后台启动格式化程序,并同时暂存文件的当前内容(可能尚未格式化,甚至处于不可预测的状态)。即:

  • task1 && task2 – 同步执行task1,如果task1成功则执行task2
  • task1 & task2 - 异步执行task1,同时执行task2(在这种情况下,task2是同步执行的,因为它后面跟着;但是换行符同义)