我已经创建了一个非常简单的预提交脚本:
#!/usr/bin/env sh
# Run tests
npm test
if [ $? -ne 0 ]; then
echo "Tests failed. Aborting.."
exit 1
fi
exit 0
当我在命令行运行git commit
(测试失败)时,我得到预期的出口1,并显示消息Tests failed. Aborting..
。
然而,如果我在Mac上使用GitHub,我会得到:
.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
(256)
我猜这是因为GitHub for Mac正在使用的执行环境不支持npm
,但我一直在绞尽脑汁地想办法解决这个问题。
发布于 2012-10-14 22:31:03
已解决。由于全局安装的节点模块最终位于/usr/local/bin
下,因此我只需要在预提交的开头添加以下内容:
PATH=$PATH:/usr/local/bin:/usr/local/sbin
即在执行点将/usr/local/bin
和/usr/local/sbin
两者附加到PATH
。
发布于 2017-04-12 21:45:21
Github Desktop和Sourcetree等图形用户界面环境中可用的$PATH变量与终端中可用的变量不同。默认情况下,图形用户界面环境中可用的$PATH不能找到您的节点模块。正如在前面的回答中所述,您可以通过添加以下内容来确保/usr/local/bin位于路径中
PATH=$PATH:/usr/local/bin:/usr/local/sbin
在我的例子中,这不起作用,因为我使用的是Node Version Manager,它存储不同版本的节点,并使升级和切换节点版本变得很容易。它将每个节点版本的node_modules存储在单独的文件中。下面是我用来解决这个问题的代码:
#!/usr/bin/env bash
PATH="/usr/local/bin:$PATH"
if [ -f $HOME/.nvm/nvm.sh ]
then
. $HOME/.nvm/nvm.sh
PATH="$HOME/.nvm/versions/node/$(nvm current)/bin:$PATH"
fi
这将检查NVM,如果存在,则加载NVM并使用它查找当前使用的Node版本的节点模块的路径。如果您只尝试访问节点模块,并且不需要获取任何特殊内容,则可以跳过添加sbin folder,例如/usr/local/sbin
发布于 2019-06-11 21:45:56
对我来说,这是因为我没有安装从预提交中调用的依赖项。在我的例子中,这是composer
,所以brew install composer
帮助我解决了这个问题。
对于将来的窥视,通过在您喜欢的文本编辑器中打开your-project-directory/.git/hooks/pre-commit
来检查是否缺少在预提交文件中调用的任何依赖项,并根据需要安装缺少的依赖项。
https://stackoverflow.com/questions/12881975
复制相似问题