【问题标题】:Permission error running any git command in makefiles在 makefile 中运行任何 git 命令的权限错误
【发布时间】:2020-10-15 02:01:58
【问题描述】:

在任何 makefile 中运行任何 git 命令时遇到重复出现的权限错误,我已经慢慢发疯了:

例如运行 make :

a:
    git --version

将导致:

make: git: Permission denied
make: *** [makefile:<line number>: <target>] Error 127 

观察:

  • 即使是最琐碎的命令也会发生,例如混帐状态
  • 以 root 身份运行时发生
  • 无论目录和文件权限如何都会发生
  • 如果直接运行,给定的命令运行没有问题
  • 重新格式化并重新安装我的操作系统后,问题消失了,但几个月后又出现了
  • BSD bmake 似乎可以正常工作

环境:

  • Arch Linux x86-64
  • GNU Make v4.3
  • Git v2.26.2

我在工作中广泛使用 makefile,这个问题慢慢变得越来越令人沮丧。如果有人对如何解决此问题有任何见解或建议,将不胜感激。谢谢。

【问题讨论】:

  • 运行:which git | xargs ls -l 并发布输出。看起来可执行标志未设置。以 root 身份运行不会克服缺少可执行标志的问题。您可以直接运行git 的事实似乎表明make 看到的git 副本与您不同。
  • -rwxr-xr-x 1 root root 3143720 Apr 20 14:22 /usr/bin/git -- 是的,它不是别名或任何东西,似乎设置了可执行位
  • 你能把同样的which命令添加到makefile吗?看看是不是git的同一个副本。
  • 这是个好主意,但位置相同
  • 尝试将git --version 放入您的makefile。这比git status 更简单。 status 命令需要访问文件系统。

标签: git makefile permissions


【解决方案1】:

如果您提供了您尝试运行的给出上述错误的配方,或者甚至是被调用命令的 make 输出,那将会非常非常有帮助。没有这个我们只能猜测,这有点浪费大家的时间:)

我的怀疑是:您的$PATH 上有一个目录,其中有一个名为git目录,它出现在您的$PATH 中的/usr/bin 之前。 p>

在 GNU make 4.3 中存在一个错误(实际上是在 gnulib 中,GNU make 使用该错误)在搜索 PATH 时没有正确忽略目录。

但是,如果您的配方以不平凡的方式(作为 shell 脚本的一部分)调用 git,这不可能成为问题。

检查这一点的最快方法是在命令行中添加一个分号;你没有向我们展示整个食谱,所以我们不能确定,但​​如果你有:

foo:
        git --version

尝试将其更改为:

foo:
        git --version;

看看它是否有效。

【讨论】:

  • 在我的$PATH 中有一个条目,其中有一个名为git 的目录确实是问题所在,谢谢。
  • 这似乎是make 中的一个错误。它不应该尝试执行目录。您可能需要提交错误报告。
  • 我确实在我的回答中明确说过 GNU make 4.3 中有一个错误(实际上该错误在 gnulib 中,GNU make 使用该错误) 已经提交了一个错误(与gnulib) 并已解决,但尚未发布带有此修复程序的新版本 GNU make。
  • 在 git 命令末尾添加 ; 有帮助。谢谢@MadScientist
猜你喜欢
  • 2021-04-24
  • 2023-01-05
  • 2021-12-25
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
相关资源
最近更新 更多