预提交/挂钩:没有这样的文件或目录

Posted

技术标签:

【中文标题】预提交/挂钩:没有这样的文件或目录【英文标题】:pre-commit/hook: No such file or directory 【发布时间】:2017-10-11 12:33:27 【问题描述】:

我在尝试提交时收到此错误。

操作系统 - 最新的 OSX

Git 版本 - git 版本 2.11.0 (Apple Git-81)

.git/hooks/pre-commit: line 2: ./node_modules/pre-commit/hook: No such file or directory

【问题讨论】:

您定义了一个预提交挂钩(在.git/hooks/pre-commit 中),它试图引用不存在的./node_modules/pre-commit/hook。如果不再需要该挂钩,您可以将其删除。 【参考方案1】:

我在使用 brew 让 yarn 在 Webstorm 中工作后遇到了这个错误。

修复只是再次重新安装预提交。

brew install pre-commit

https://pre-commit.com/

【讨论】:

【参考方案2】:

在 macOS 上工作,我的问题是 Python3 最初是通过 Homebrew 安装的,在我通过 brew update && brew upgrade 升级 Python3 后,我遇到了同样的错误。

为了解决这个问题,我需要更新 .git/hooks/pre-commit 文件中的 shebang (#!) 行指向的目录中的符号链接。

这是我在环境中解决此问题的方法:

    .git/hooks/pre-commit的内容:

    cat .git/hooks/pre-commit
    

    前几行应该类似于:

    #!/usr/local/opt/pre-commit/libexec/bin/python3
    # File generated by pre-commit: https://pre-commit.com
    # ID: 0123456789abcdef0123456789abcdef
    import os
    import sys
    

    记下shebang行中python3可执行文件的路径:

    /usr/local/opt/pre-commit/libexec/bin/
    

    cd 进入该目录。

    cd /usr/local/opt/pre-commit/libexec/bin/
    

    看看 Python 符号链接:

    ls -l | grep python
    

    您会看到一些可能已损坏的符号链接:

    lrwxr-xr-x  1 user  group    91 Apr  5 13:33 python -> /usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    lrwxr-xr-x  1 user  group    91 Apr  5 13:33 python3.9 -> /usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    lrwxr-xr-x  1 user  group    91 Apr  5 13:33 python3 -> /usr/local/Cellar/python@3.9/3.9.2_4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    

    快速提示:如果出现问题或我的回答不是解决方案,您可能需要先通过运行备份这些符号链接:

    mv python python.bak
    
    mv python3.9 python3.9.bak
    
    mv python3 python3.bak
    

    使用ln -s [PATH] [LINK] 更新符号链接,其中[PATH] 是Homebrew 更新的Python3 可执行文件的位置,[LINK]pythonpython3.9python3

    ln -s /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9 python
    
    ln -s /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9 python3.9
    
    ln -s /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9 python3
    

    完成后,再次列出 Python 符号链接。

    ls -l | grep python
    

    您应该会看到更新的符号链接,git commit 现在应该可以工作了。

    lrwxr-xr-x  1 user  group    89 Apr  6 13:58 python -> /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    lrwxr-xr-x  1 user  group    89 Apr  6 13:58 python3 -> /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    lrwxr-xr-x  1 user  group    89 Apr  6 13:58 python3.9 -> /usr/local/Cellar/python@3.9/3.9.4/Frameworks/Python.framework/Versions/3.9/bin/python3.9
    

【讨论】:

【参考方案3】:
INGW64 ~/code/ingestor-gdelt (test-build)
$ git commit -m "your comment"

.git/hooks/pre-commit:第 9 行:py:找不到命令

.git/hooks/pre-commit:第 10 行:py:找不到命令

git commit --no-verify -m "your comment"

这个命令解决了我的问题!!

【讨论】:

它暂时解决了问题,但它也跳过了您的预提交任务,并没有真正解决问题。它只是绕过错误的一种解决方法。【参考方案4】:

只要确保在 .git 中有 hooks 文件夹。如果不做一个。

【讨论】:

【参考方案5】:

.git 内部的钩子中删除 pre-commit 对我有用

【讨论】:

【参考方案6】:

如果脚本文件确实存在,那么原因可能是脚本的第一行应该是

#!/bin/sh

否则你会得到同样的错误。

【讨论】:

【参考方案7】:

您应该删除node_modules 文件夹并运行npm installyarn install 再次安装。之后,您可能会解决问题。

【讨论】:

【参考方案8】:

当您尝试提交更改时,预提交挂钩首先运行,它可用于执行某些检查、测试、条件。在这种情况下,很明显,你没有它,这就是它抱怨的原因。

转到.git/hooks 目录并删除pre-commit 文件,因为它试图引用node_modules/pre-commit/hook。它应该解决它。

其他选项是在您的提交后附加选项:--no-verify,它将在不检查的情况下进行提交。

【讨论】:

我得到了完全相同的错误,这意味着 gem webpacker 和 webpack 安装过程有问题;因为这就是我刚刚所做的。但奇怪的是pre-commit 文件最后一次修改是在六个月前。但是删除 pre-commit 文件解决了我的问题。 我遇到了同样的问题,但无法通过删除 pre-commit 文件来解决。比我尝试在终端中通过命令提交并最后添加--no-verify 命令,所以我的命令是git commit -m "message" --no-verify。它对我有用。 如果 Lint 设置为强制执行格式化规则,就会发生这种情况。正如@Mutant 和@KomalGoyani 提到的,您可以使用git commit -n (or --no-verify) 绕过Lint 检查

以上是关于预提交/挂钩:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

Git 预提交挂钩未在 Windows 上运行

AWS Beanstalk Laravel 部署后挂钩没有这样的文件或目录

哈士奇预提交挂钩未触发

SVN 的 CPP 检查预提交挂钩

针对冲突文件的SVN预提交挂钩

有没有办法让 git commit --verbose 在使用预提交挂钩时显示更新的差异?