Git:结账没有运行post-checkout hook

dlu*_*dlu 4 git

我有一个我喜欢的post-checkout钩子 - 大部分时间 - 但我不时地知道运行它会浪费时间,或者,因为它丢弃并重建我的开发数据库,​​我不想要它做的事情.

是否有跳过钩子的git选项?如此公平,我已经找到了一个.

Ant*_*ile 16

core.hooksPath您可以通过强制成为不存在的路径(通过-c)从命令行执行此操作

例如:

$ cat .git/hooks/post-checkout 
#!/usr/bin/env bash
echo 'nope'
exit 1
$ git checkout -- .
nope
$ git -c core.hooksPath=/dev/null checkout -- .
$ 
Run Code Online (Sandbox Code Playgroud)


lar*_*sks 8

我不认为有一个命令行选项来做你想要的,但你可以通过使用环境变量作为标志来平凡地解决这个问题.在您的post-checkout脚本中,从以下开始:

#!/bin/sh
[ "$SKIP_POST_CHECKOUT" = 1 ] && exit 0
Run Code Online (Sandbox Code Playgroud)

然后当你想跳过post-checkout脚本时:

SKIP_POST_CHECKOUT=1 git pull
Run Code Online (Sandbox Code Playgroud)

等等.

如果输入的内容太多,你总是可以缩短你的变量名.:)


rue*_*ste 5

我刚刚找到了另一个答案。只需将该-c core.hooksPath=/dev/null选项添加到您的 git 命令中即可。这将覆盖仅一个命令的配置,并禁用所有挂钩。例如:

git -c core.hooksPath=/dev/null checkout master
git -c core.hooksPath=/dev/null pull
git -c core.hooksPath=/dev/null commit ...
git -c core.hooksPath=/dev/null push
Run Code Online (Sandbox Code Playgroud)