【问题标题】: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。如果不再需要该挂钩,您可以将其删除。

标签: git pre-commit-hook pre-commit


【解决方案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 (#!) 行指向的目录中的符号链接。

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

    1. .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/
      
    2. cd 进入该目录。

      cd /usr/local/opt/pre-commit/libexec/bin/
      
    3. 看看 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
      
    4. 使用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
      
    5. 完成后,再次列出 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 检查
              猜你喜欢
              • 2021-01-08
              • 1970-01-01
              • 2021-05-08
              • 1970-01-01
              • 1970-01-01
              • 2021-07-29
              • 1970-01-01
              • 2020-10-18
              相关资源
              最近更新 更多