当我在Windows 10的git bash中运行git-gui时,我得到“第3行:exec:wish:未找到”

时间:2019-11-22 21:40:29

标签: windows git

我已经在Windows上使用git和git gui命令大约两年了,没有任何问题。最近,我在Windows 10上安装了ubuntu,并为linx(wsl)启用了Windows子系统,并在ubuntu bash中安装了git,以为我将从那里运行git命令。从那时起,当我将git bash用作Windows的git的一部分时,git就被破坏了。

当我在git的git bash提示符下为Windows运行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
  • 为Windows卸载了git,并在重启后重新安装了
  • 为Windows卸载git,从程序文件中删除git文件夹,并在重启后重新安装
  • 通过在Windows https://tkdocs.com/tutorial/install.html#installwin上安装tk来安装愿望
  • 将git重新安装到C盘(避免使用“程序文件”中的空格,这可能会导致错误)。
  • 将c:\ Git \ mingw64 \ bin添加到我的用户路径变量中

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

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

  • 已安装到C:/ Git
  • 组件:✔️git Bash此处,✔️git Gui此处,✔️将.git *配置文件与默认文本编辑器关联,✔️关联.sh文件与Bash一起运行。
  • 使用Visual Studio Code作为Git的默认编辑器。
  • 路径:您想如何在命令行中使用Git?通过命令行以及第三方软件进行Git操作。
  • https传输后端:使用openSSL库
  • 行尾:签出Windows风格,提交unix风格
  • 终端模拟器:使用MinTTY
  • 其他选项:✔️启用文件系统缓存,✔️启用git凭据管理器,✔️启用符号链接
  • 未选择实验性内置add -i / -p

2 个答案:

答案 0 :(得分:2)

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

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

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

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

如果PATH命令产生多个路径,请检查which是否在git bash上执行良好,并删除其他路径(<警告> 是指为{{ 1}})从变量/cmd/git-gui

当我假设git-gui不在我的路径时,我会遇到相同的错误

PATH

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

/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 命令可用于# 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.


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

  

git-gui(Windows):在-a

中使用git-gui.exe      

调用Print all matches in PATH, not just the first时, Git GUI假定   可以直接在Windows上调用Create Desktop Shortcut。但是,在   Git for Windows 2.x的上下文,留下了几个关键环境   变量未初始化,导致无法使用的快捷方式。

     

为解决这些环境变量问题,Git for Windows随附了一个   方便的Repository>Create Desktop Shortcut,因此,请在可用时使用它。

     

此修复#448

     

签名人:Johannes Schindelin

如上面的提交消息中突出显示的那样,作者明确指出要使用位于wish.exe目录中的git-gui.exe


最后一点,我建议OP:

  • 分别使用git-gui.exe/cmd命令检查Windows cmd和git-bash的PATH变量是否包含git-gui的冲突目录( Windows cmd {{1} } env传递给git-bash
  • 模拟一个空的where变量,如上所示,仅将which添加到git-bash的PATH变量中,然后检查您是否能够运行{{1} }来自git-bash
  • 确认PATH是否在Windows cmd中运行
  • 检查是否将目录正确添加到环境变量/cmd中 ( Windows cmd和git bash
  • 尝试运行PATHgit-gui,git-bash中的两个命令是否给出相同的错误?

  

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

为了重现这一点,我

  1. 设置Windows 10 VM(内部版本1909,单一语言家庭版)
  2. 为Windows版本git-gui

    安装git
    • Git安装位置:PATH
      • 您在问题中提到的类似选项,但编辑器除外
        观察
        • git-gui已添加到Windows cmd的git gui环境变量中(因此也添加了git-bash)
    • 命令2.24.0.windows.2C:\Git均可从git-bash中使用
  3. C:\Git\cmd启用Windows功能PATH

  4. 从Microsoft商店安装Ubuntu应用(Ubuntu 18.04)(已预安装git)
  5. 使用this
  6. 将git更新到最新版本
  7. git分别适用于运行在git-guigit gui上的bash和Windows
  8. 命令Windows Subsystem for linuxBash on Ubuntu Windows都可以从git-bash中正常使用
  9. 为bash卸载了ubuntu并关闭了wsl,它仍然可以正常工作

另外debugging可以在git的环境variables中完成。

  

2.24.0确定Git在哪里寻找其子程序(例如   git-commit,git-diff等)。您可以检查当前设置   通过运行git --exec-path。

  • 在git-bash上运行此命令2.24.0.windows.2,并验证是否 显示:git gui
  

git-gui控制常规跟踪,这些跟踪不适合任何常规跟踪   具体类别。这包括别名的扩展,以及   委托其他子程序。

  • 运行此命令GIT_EXEC_PATH,并显示输出 (包括已解析的git --exec-path的exec目录)
  

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

  • 尝试运行此命令C:/Git/mingw64/libexec/git-core

如果没有其他作用,则可以打开新期刊here

答案 1 :(得分:0)

因此,此评论太长了:看看here

  

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

    exec wish "$0" "$@"
     

原因是某些sh版本存在错误。如果没有   论点,这些破碎的sh仍将“ $ @”扩展为单个   空参数。糟糕!

     

如果设置了$ VAR,则sh语法$ {VAR + VALUE}扩展为VALUE,并且   别无其他。我们滥用此语法来解决越野车问题   实现。回想一下,第一个参数名为$ 1。如果它   存在,那么我们使用“ $ @”;否则我们什么都不做:

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

我认为您使用的是Windows:

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

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

就我而言。

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

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

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