如何删除远程 Git 钩子?

60

我使用Husky实现了pre-push钩子,现在我想要删除它。

问题是,在运行yarn remove husky后,git钩子仍然存在于.git/hooks内。

因此,每次我想要提交或切换分支或提交时,都会出现以下错误,从而无法进行提交-->

.git/hooks/pre-commit:第6行:node_modules/run-node/run-node:没有那个文件或目录

我知道我可以始终删除.git/hooks中的每个钩子,但如何将此更改推送到远程? 如何不强制我的团队成员执行相同的操作?

我也知道我可以使用-n标志提交,但我仍然希望不这样做。

5个回答

92

假设你没有非哈士奇的挂钩,你可能想保留:

rm -f .git/hooks/*

".git/hooks/"目录下的每个文件都是git-hook或者被git忽略的。如果删除该目录中的所有内容,您将摆脱所有钩子,并恢复默认行为。

默认情况下,该目录中有示例钩子,但除了作为示例外,它们没有任何用途,因此您可以将其删除。


7
我建议在代码库中运行 git init 以重新创建默认的钩子样例。 - phd
1
很酷。但是如何将此更改推送到远程分支,以便稍后合并到开发分支?我不想强制每个人手动删除它。也许我在这里理解有误。 - Nikola Mitic
2
.git 文件夹中的所有内容都是纯本地的。你无法更改队友机器上的钩子。 - kowsky
@Nikola Mitic,你在这个文件夹里做的任何事情都只会在本地发生。根据你的钩子,你可能想要在所有远程上重复这个过程。(但是然后你可能会问自己,钩子最初是如何进入远程的,因为你不能使用工作树来更改.git/hooks中的文件)。 - wotanii
1
一个“不那么激进/假定”的版本是只删除使用husky的钩子。这样做就可以了:rm \grep -l husky .git/hooks/*`` - spechter

27

我认为把所有*.sample文件放在.git/hooks目录下更好。

要删除husky提供的git hooks:

  • 首先,进入hooks目录。
cd .git/hooks
  • 其次,保留所有*.sample文件,删除其他文件
ls | grep \.sample -v | xargs rm

但是它们没有实际用途,对吧? - finnmglas
或者简单地针对基于Husky的钩子进行调整,这似乎是主要的目标。这样做就可以解决问题:rm \grep -l husky .git/hooks/*`` - spechter

9
git config --unset core.hooksPath

8

Husky 文档建议使用以下方式进行操作:

$npm uninstall husky && git config --unset core.hooksPath

or 

$ yarn remove husky && git config --unset core.hooksPath

1
文档链接已损坏,但说明至今(2023年6月)仍有效。 - thoroc
1
文档链接已损坏,但截至今天(2023年6月),说明书仍然有效。 - undefined
这是当前文档的链接:npm yarn - Anish

2

基本上,删除远程git钩子是不可能的。

你能做的最好办法就是删除你本地的钩子并通知团队的其他成员也这样做。

关于如何在本地删除git钩子,请参考@wotanii 回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接