【问题标题】:When I run the git-gui in git bash on windows 10 I get "line 3: exec: wish: not found"当我在 Windows 10 上的 git bash 中运行 git-gui 时,我得到“第 3 行:执行:希望:未找到”
【发布时间】:2019-12-16 09:17:43
【问题描述】:

我已经在 Windows 上使用 git 和 git gui 命令大约 2 年了,没有任何问题。最近,我在 Windows 10 上安装了 ubuntu,并为 linx (wsl) 启用了 windows 子系统,并在 ubuntu bash 中安装了 git,以为我会从那里运行 git 命令。从那以后,当我使用 git bash 作为 git for windows 的一部分时,git 就彻底崩溃了。

当我在 git for windows 的 git bash 提示符下运行 git gui 时,我得到了

C:/Program Files/Git/mingw64/libexec/git-core\git-gui: line 3: exec: wish: not found

我发现上述输出真正令人困惑的一点是 git-gui 之前的斜杠是“\”反斜杠,而其他斜杠是正斜杠,尽管它可能无关紧要?

我仍然可以从 Windows 上下文菜单中成功运行 git gui(当我右键单击文件夹时)。

我尝试过的事情:

  • 从 ubuntu 卸载 git
  • 已卸载 ubuntu
  • 卸载 git for windows 并在重启后重新安装
  • 卸载 git for windows,从程序文件中删除 git 文件夹,重启后重新安装
  • 通过在windows上安装tk来安装wish https://tkdocs.com/tutorial/install.html#installwin
  • 将 git 重新安装到 C 盘(避免“程序文件”中可能导致错误的空间)。
  • 将 c:\Git\mingw64\bin 添加到我的用户路径变量中

activeTCl/bin(包含wish.exe)在我的系统路径上。当我在 git bash 中运行“wish --version”时,会弹出一个小空窗口,无论它是什么,wish 似乎都可以访问。以前从来不需要希望或 ActiveTcl 来运行 git 命令,所以我也对此感到有些困惑!任何帮助,将不胜感激!如果 git for windows 需要wish,为什么 git for windows 安装程序不安装它?

根据要求,这是我在为 windows 安装 git 时使用的选项:

  • 安装到 C:/Git
  • 组件:✔️ git Bash Here,✔️ git Gui Here,✔️ 将 .git* 配置文件与默认文本编辑器关联,✔️ 关联要与 Bash 一起运行的 .sh 文件。
  • 使用 Visual Studio Code 作为 Git 的默认编辑器。
  • 路径:您希望如何从命令行使用 Git? Git 从命令行和 3rd-party 软件。
  • https 传输后端:使用 openSSL 库
  • 行尾:checkout windows-style,commit unix-style
  • 终端模拟器:使用 MinTTY
  • 额外选项:✔️ 启用文件系统缓存,✔️ 启用 git 凭据管理器,✔️ 启用符号链接
  • 未选择实验性内置添加 -i/-p

【问题讨论】:

  • @Christoph 感谢您的建议,但该论坛解决了类似的问题,但针对 gitk on linux。我在windows上,我已经安装了wish。
  • 我无法重现该错误。 git gui 在我的情况下从 git bash 工作。我看不懂,但看起来很相似:blog.zdenekvecera.cz/item/…
  • 你可以找到相关代码here,但在我的windows cmd中:>where git C:\Git\cmd\git.exe>where wish INFORMATION: Es konnten keine Dateien mit dem angegebenen Muster gefunden werden.你在windows上工作?也许包括安装的所有步骤...
  • @RobinNelson,你试过在 git-bash 中运行 git-guigit gui 吗?这两个命令都给出相同的错误?

标签: windows git


【解决方案1】:

我全新安装了 git,版本为 2.24.0.windows.2,选项与问题中提到的类似。

我在 git-bash 上运行了 which 命令来获取执行 git-gui 的路径。

$ which -a git-gui
/cmd/git-gui

在 git bash 中使用 echo $PATH 检查 PATH 中是否存在 /cmd,或者在 Windows cmd 中使用 echo %PATH% 检查 PATH 中是否存在 C:/Git/cmd。如果没有,那么您可以将它添加到您的 PATH 变量(Windows cmd 或 git-bash)中。

如果which 命令产生多个路径,请检查/cmd/git-gui 是否在 git bash 中执行良好,并从PATH 变量。

当我假设/cmd 不在我的路径中时,我得到了同样的错误

# Simulate an empty PATH variable
$ export PATH=:

# Run git-gui from git-core directory
$ C:/Git/mingw64/libexec/git-core/git-gui
C:/Git/mingw64/libexec/git-core/git-gui: line 3: exec: wish: not found

git-gui 存在多个路径的另一种情况:

# Simulate PATH variable with the following directories
$ export PATH=/usr/bin:/mingw64/libexec/git-core/:/cmd

# Run git-gui
$ git-gui
/mingw64/libexec/git-core/git-gui: line 3: exec: wish: not found

# Lists the paths 
$ which -a git-gui
/mingw64/libexec/git-core/git-gui
/cmd/git-gui

注意which 命令可用于Write the full path of COMMAND(s) to standard output. 和参数 -a 用于Print all matches in PATH, not just the first


我在 git for Windows GitHub 存储库上找到了一个已关闭的 issue。乍一看似乎无关,但是在看到 fix 的提交消息时,它提供了一些背景,说明您可能会遇到错误的原因。

git-gui (Windows):在 Create Desktop Shortcut 中使用 git-gui.exe

当调用Repository>Create Desktop Shortcut 时,Git GUI 假定 可以直接在 Windows 上调用wish.exe。然而,在 Git for Windows 2.x 的上下文,留下了几个关键的环境 变量未初始化,导致快捷方式不起作用。

为了解决这些环境变量问题,Git for Windows 提供了一个 方便git-gui.exe,有空就用吧。

这修复了 #448

签字人:Johannes Schindelin

正如上面提交消息中强调的那样,作者明确指出要使用位于/cmd 目录中的git-gui.exe


作为最后一点,我建议 OP:

  • 分别使用 wherewhich 命令检查 Windows cmd 和 git-bash 的 PATH 变量是否存在包含 git-gui 的冲突目录(Windows cmd PATH env 已传递给 git-bash)
  • 如上所示模拟一个空的PATH 变量,只将/cmd 添加到git-bash 的PATH 变量中,然后检查您是否能够从git-bash 运行git-gui
  • 确认git-gui是否在Windows cmd中运行
  • 检查您是否正确地将目录添加到环境变量PATHWindows cmd 和 git bash
  • 尝试运行git-guigit gui,git-bash 中的两个命令是否给出相同的错误?

我已经在 Windows 上使用 git 和 git gui 命令大约 2 年没有问题。最近,我在 Windows 10 上安装了 ubuntu 并 启用 linx (wsl) 的 windows 子系统并在 ubuntu bash,以为我会从那里运行 git 命令。从此,git 当我将 git bash 用作 git for windows 的一部分时,它非常糟糕。

为了重现这个,我

  1. 设置 Windows 10 虚拟机(内部版本 1909,单语言家庭版)
  2. 安装 git for windows 版本2.24.0.windows.2

    • Git 安装位置:C:\Git
      • 您在问题中提到的类似选项,除了编辑器
        观察
        • C:\Git\cmd 被添加到 Windows cmd 的 PATH 环境变量中(因此也是 git-bash)
    • git-guigit gui 这两个命令都在 git-bash 中工作
  3. Bash on Ubuntu Windows开启Windows功能Windows Subsystem for linux

  4. 从 Microsoft 商店安装 Ubuntu 应用 (Ubuntu 18.04)(预装了 git)
  5. 使用 this 将 git 更新到最新版本
  6. git 适用于分别在2.24.02.24.0.windows.2 运行的bash 和windows
  7. 命令 git guigit-gui 在 git-bash 中按预期工作
  8. 卸载了 ubuntu for bash 并关闭了 wsl,它仍然可以工作

进一步的debugging可以使用git的环境variables来完成。

GIT_EXEC_PATH 决定 Git 在哪里寻找它的子程序(比如 git-commit、git-diff 等)。您可以检查当前设置 通过运行 git --exec-path。

  • 在 git-bash 上运行这个命令git --exec-path,并验证它是否 显示:C:/Git/mingw64/libexec/git-core

GIT_TRACE 控制一般跟踪,不适合任何 具体类别。这包括别名的扩展,以及 委托给其他子程序。

  • 运行此命令GIT_TRACE=1 git gui,并显示输出 (其中包括 git-gui 的已解析 exec 目录)

GIT_CONFIG_NOSYSTEM,如果设置,禁用系统范围的使用 配置文件。如果您的系统配置是 干扰您的命令,但您无权更改或 删除它。

  • 尝试运行此命令GIT_CONFIG_NOSYSTEM=1 git gui

如果没有其他方法,您可以打开一个新问题 here

【讨论】:

  • 感谢您非常彻底的回答并尝试重现该问题。您建议的命令的结果大多不值得注意,execpt:$ GIT_TRACE=1 git gui 13:55:37.606832 exec-cmd.c:237 trace: resolved executable dir: C:/Git/mingw64/bin 13:55:37.608861 git.c:702 trace: exec: git-gui 13:55:37.608861 run-command.c:663 trace: run_command: git-gui C:/Git/mingw64/libexec/git-core\git-gui: line 3: exec: wish: not found
  • 我不确定我以前是否可以这样做,但我可以从 cmd 运行 git-guigit gui。另外,我可以从 git bash 运行 git-gui,但仍然不能从 bash 运行 git-gui。所以,我只是在那里称它为好,只需运行带有连字符的命令。我不知道你的建议是否真的让我运行git-gui,但你的回答是彻底和解释性的,所以你得到了一个很好的绿色检查。
  • 另外,我从路径中删除了/mingw64/libexec/git-core/git-gui,将c:/git/cmd 留在路径上。这可能是允许 git-gui 从 git bash 运行的修复的一部分。
【解决方案2】:

所以评论太长了:看看here

那么为什么下面的尝试不起作用?

    exec wish "$0" "$@"

原因是某些版本的 sh 存在错误。如果没有 参数,这些损坏的 sh 仍然会将 "$@" 扩展为单个 空论。哎呀。

如果设置了 $VAR,则 sh 语法 ${VAR+VALUE} 扩展为 VALUE,并且 没有别的。我们滥用这种语法来解决错误的 sh 实施。回想一下,第一个参数名为 $1。如果它 存在,那么我们使用“$@”;否则我们什么都不做:

    exec wish "$0" ${1+"$@"}

我假设您使用的是 Windows:

转到...\Git\mingw64\libexec\git-core。然后你应该找到git-gui。如果你用编辑器打开它,它看起来像

#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"
...

就我而言。

我不是这里的专家,我不理解上面链接中的详细信息,但由于它只是一个脚本并且您已经重新安装了所有内容,我会尝试一下

#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" ${1+"$@"}
...

我希望这会有所帮助,并且不会破坏任何东西 ;-)

【讨论】:

  • 不错的尝试!我注释掉了exec wish "$0" -- "$@" 并添加了你的建议。同样的错误。 C:/Git/mingw64/libexec/git-core\git-gui: line 4: exec: wish: not found
  • 是的,还是有问题。那太好了!
  • 请详细描述一下,您在安装 Git 时选择了哪些选项,请显示git version。如果我什么都没看到,我会开始赏金。
  • 我在原始问题@Christoph 的末尾添加了详细信息
  • git 版本 2.24.0.windows.2
猜你喜欢
  • 2018-03-04
  • 2012-08-08
  • 2014-11-04
  • 2019-08-17
  • 2020-04-21
  • 2017-09-04
  • 2016-04-09
  • 2021-11-26
  • 2018-07-13
相关资源
最近更新 更多