【问题标题】:Fatal: git was built without support for git-add--interactive (NO_PERL=1)致命: git 的构建不支持 git-add--interactive (NO_PERL=1)
【发布时间】:2015-05-28 17:11:39
【问题描述】:

当我执行“git add -i”时它会弹出这个错误:

致命:构建 git 时不支持 git-add--interactive (NO_PERL=1)

我急需帮助!

【问题讨论】:

  • 它告诉您您的 git 副本是在没有 Perl 的情况下编译的,因此不支持 git 的许多交互功能。你能不能不和普通的老git add一起去?
  • 你在做什么?你是怎么安装 git 的?
  • git 很容易在$HOME 中安装真的make install 来自一个干净的结帐。如果您的系统实际上缺少 perl,请先安装它,然后您需要更多的模块,CPAN 等等,但这并不难。

标签: linux git


【解决方案1】:

使用 Git 2.25(2020 年第一季度,五年后),Perl 不再是 git add 的要求。
这里,“git add -i”正在用 C 重写。

commit 8c15904commit 3d965c7(2019 年 11 月 15 日)和commit 1daaebc(2019 年 11 月 13 日)Slavica Đukić (slavicaDj)
请参阅commit 68db1cbcommit 76b7432commit 6348bfb(2019 年 11 月 15 日)和commit f83dff6(2019 年 11 月 13 日)Johannes Schindelin (dscho)
参见commit 5e82b9ecommit e4cb659(2019 年 11 月 13 日)Daniel Ferreira (theiostream)
(由 Junio C Hamano -- gitster -- 合并于 commit f7998d9,2019 年 12 月 5 日)

built-in add -i:执行help命令

签字人:Slavica Đukić
签字人:Johannes Schindelin

这模仿了内置版本中 Perl 脚本git-add--interactive.perl 中的帮助文本显示代码。

还有:

built-in add -i: 显示命令的唯一前缀

原始补丁作者:Slavica Đukić
帮助者:SZEDER Gábor
签名者:Johannes Schindelin支持>

就像在 Perl 脚本 git-add--interactive.perl 中一样,为每个命令确定一个唯一的 前缀(如果给定参数中存在任何前缀),并显示在列表中,并作为快捷方式接受为命令。

为了确定唯一前缀以及查找相关命令,我们使用列表的副本并对其进行排序。

虽然这对于单个命令来说似乎有点过头了,但当所有命令都被实现时,当我们重用相同的逻辑来呈现要编辑的文件列表时,它会更有意义,并带有方便的唯一前缀。

在这个补丁系列的开发之初,引入了一种模仿 Perl 版本实现的 Trie 的专用数据结构。然而,这被认为是多余的,我们现在只需通过查看每个项目的邻居来确定唯一前缀的长度之前对列表进行排序。作为奖励,我们现在使用相同的排序列表执行二进制搜索,使用用户提供的前缀作为搜索键。

add-interactive.c 解释:

“前缀项目列表”是由字符串标识的项目列表,并且为每个项目确定唯一的前缀(如果有)。

开头:

git add -i:开始实现git add --interactive的内置版本

签字人:约翰内斯·辛德林

与之前的 C 转换不同,我们从内置帮助程序开始,当新的选择加入 add.interactive.useBuiltin 配置旋钮打开时(或对应的环境变量GIT_TEST_ADD_I_USE_BUILTIN),并调用直接在libgit.a中实现的新的内部API函数run_add_i()

整个转换过程可以在 PRs #170-175 github.com/gitgitgadget/git 中找到。

--helper 方法”很遗憾不能在这里使用:在 Windows 上,我们面临一个非常具体的问题,即 Perl 中的 system() 调用似乎在生成的进程消耗甚至一个时关闭父进程中的 stdin来自stdin 的字符。这使我们无法在 C 中实现主循环,并且仍然试图移交给 Perl 脚本。

我们必须在这里采用的方法的真正缺点是测试套件在转换完成之前不会通过GIT_TEST_ADD_I_USE_BUILTIN=true--helper 方法会让它通过,即使在每个增量转换步骤)。


注意:您可以在 Git 2.25 中看到错误消息(报告于 git-for-windows/git issue 2466):

BUG: pathspec.c:555: PATHSPEC_PREFER_CWD requires arguments

这应该在 Git 2.25.2(2020 年 3 月)中得到修复。

参见Johannes Schindelin (dscho)commit 849e43ccommit d660a30(2020 年 1 月 16 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit f094074,2020 年 1 月 30 日)

built-in add -i:再次接受开放式范围

签字人:约翰内斯·辛德林

交互式add 命令允许通过唯一的前缀、索引或索引范围为其某些子命令选择多个文件。

在 C 中重新实现 git add -i 时,我们甚至添加了一个代码注释,讨论缺少结束索引的范围,例如 2-,但代码实际上并没有接受这些,正如 @987654348 中指出的那样@@qhill

顺便说一句,git add --interactiveC 中的重写破坏了使用开放范围选择文件的能力,例如Patch update>> 2- 选择除第一个文件之外的所有文件。
这与此问题有关,因为尝试这样做会导致与此问题相同的行为(即 2.24.1.windows.2 中的 BUG 和 2.25.0.windows.1 中的立即退出)。

让我们解决这个问题,并添加一个测试用例来验证它是否永远保持不变。


使用 Git 2.26(2020 年第一季度),将“git-add--interactive”移至 C 的工作仍在继续。

参见commit c480eebcommit cee6cb7commit 52628f9commit 6610e46commit 90a6bb9commit 36bae1dcommit d2a233c(2019 年 12 月 21 日)Johannes Schindelin (dscho)
(合并Junio C Hamano -- gitster --commit 9a5315e,2020 年 2 月 5 日)

built-in add -p:准备“舞台”以外的补丁模式

签字人:约翰内斯·辛德林

支持git add -p 的Perl 脚本不仅用于该命令,还用于git stash -pgit reset -pgit checkout -p

为了准备教 git add -p 的 C 版本也支持后面的命令,让我们将“阶段”特定的内容抽象为描述补丁模式之间差异的专用数据结构。

最后,请注意 Perl 版本试图确保只为修改后的文件生成差异。 这实际上不是必需的,因为对 Git 的 diff 机器的调用已经执行了该工作,并且执行得很好。这使得无需移植%patch_modes 结构的FILTER 字段以及get_diff_reference() 函数。

【讨论】:

  • 我在 2.26.2 上运行 fatal: git was built without support for git-add--interactive (NO_PERL=YesPlease)git add -pgit stash -p 时仍然得到 fatal: git was built without support for git-add--interactive (NO_PERL=YesPlease)
  • 在 2.27 上,您还会收到该错误消息吗?
  • 我的包管理器更新后几周后会通知您。
  • 所以一年后我在 2.31.1 上,我仍然需要 perl 才能使用这个功能。没什么大不了的,我会用 perl 构建 git。我希望能够减少依赖。t
  • @AgrimPathak 我同意。这还没有完全实现。
【解决方案2】:

感谢你们的 cmets。我通过删除 git 并安装它“apt-get install git”来修复它。

问题在于 Bitnami-LAMP 虚拟机带有一个预构建的 git,我猜它不是用 PERL 构建的。我检查了我的 PERL 版本,一切正常。无论如何,一切都很好。

【讨论】:

  • 你是如何第一次删除 git 的?到目前为止,我刚刚在我的 Bitnami LAMP VM 上尝试了apt-get install git,但又遇到了同样的错误。
猜你喜欢
  • 2019-05-28
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多