发布
社区首页 >问答首页 >用于mac的GitHub中的Git预提交钩子失败(在命令行上有效)

用于mac的GitHub中的Git预提交钩子失败(在命令行上有效)
EN

Stack Overflow用户
提问于 2012-10-14 19:56:01
回答 4查看 17.1K关注 0票数 22

我已经创建了一个非常简单的预提交脚本:

代码语言:javascript
代码运行次数:0
复制
#!/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,我会得到:

代码语言:javascript
代码运行次数:0
复制
.git/hooks/pre-commit: line 5: npm: command not found
Tests failed. Aborting..
 (256)

我猜这是因为GitHub for Mac正在使用的执行环境不支持npm,但我一直在绞尽脑汁地想办法解决这个问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-14 22:31:03

已解决。由于全局安装的节点模块最终位于/usr/local/bin下,因此我只需要在预提交的开头添加以下内容:

代码语言:javascript
代码运行次数:0
复制
PATH=$PATH:/usr/local/bin:/usr/local/sbin

即在执行点将/usr/local/bin/usr/local/sbin两者附加到PATH

票数 28
EN

Stack Overflow用户

发布于 2017-04-12 21:45:21

Github Desktop和Sourcetree等图形用户界面环境中可用的$PATH变量与终端中可用的变量不同。默认情况下,图形用户界面环境中可用的$PATH不能找到您的节点模块。正如在前面的回答中所述,您可以通过添加以下内容来确保/usr/local/bin位于路径中

代码语言:javascript
代码运行次数:0
复制
PATH=$PATH:/usr/local/bin:/usr/local/sbin

在我的例子中,这不起作用,因为我使用的是Node Version Manager,它存储不同版本的节点,并使升级和切换节点版本变得很容易。它将每个节点版本的node_modules存储在单独的文件中。下面是我用来解决这个问题的代码:

代码语言:javascript
代码运行次数:0
复制
#!/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

票数 7
EN

Stack Overflow用户

发布于 2019-06-11 21:45:56

对我来说,这是因为我没有安装从预提交中调用的依赖项。在我的例子中,这是composer,所以brew install composer帮助我解决了这个问题。

对于将来的窥视,通过在您喜欢的文本编辑器中打开your-project-directory/.git/hooks/pre-commit来检查是否缺少在预提交文件中调用的任何依赖项,并根据需要安装缺少的依赖项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12881975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档