Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When I run the git-gui in git bash on windows 10 I get "line 3: exec: wish: not found"

Tags:

git

windows

I've been using git and the git gui command on windows for about 2 years with no issues. Recently, I installed ubuntu on windows 10 and enabled the windows subsystem for linx (wsl) and installed git in the ubuntu bash, thinking I'd run git command from there. Ever since, git is quite broken when I use the git bash as part of git for windows.

When I run git gui in the git bash prompt in git for windows I get

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

One thing I find really mystifying about the above output is that the slash before git-gui is a '\' backslash while the others are forward slashes, though it's probably irrelevent?

I can still successfully run git gui from the windows context menu (when I right click a folder).

Things I've tried:

  • uninstalled git from ubuntu
  • uninstalled ubuntu
  • uninstalled git for windows and reinstalled after restart
  • uninstalled git for windows, removed git folder from program files, and reinstalled after restart
  • installed wish by installing tk on windows https://tkdocs.com/tutorial/install.html#installwin
  • reinstalled git to C drive (avoiding the space in "program files" which can cause bugs).
  • Added c:\Git\mingw64\bin to my user path variable

activeTCl/bin (which contains the wish.exe) is on my system path. When I run 'wish --version' in git bash a little empty window pops up, wish seems accessible, whatever it is. Never needed wish or ActiveTcl to run git commands before, so I'm a bit mystified by that as well! Anyhelp would be appreciated! If wish is needed by git for windows why isn't it installed by the git for windows installer?

As requested, Here's the options I used when installing git for windows:

  • Installed to C:/Git
  • Components: ✔️ git Bash Here, ✔️ git Gui Here, ✔️ Associate .git* configuration files with the default text editor, ✔️ Associate .sh files to be run with Bash.
  • Use Visual Studio Code as Git's Default editor.
  • Path: How would you like to use Git form the command line? Git from the command line and also from 3rd-party software.
  • https transport backend: use the openSSL library
  • line endings: checkout windows-style, commit unix-style
  • terminal emulator: use MinTTY
  • extra options: ✔️ enable file system caching, ✔️ enable git credential manager, ✔️ enable symbolic links
  • did not opt for experimental built-in add -i/-p
like image 328
Robin Nelson Avatar asked Nov 22 '19 21:11

Robin Nelson


1 Answers

I did a fresh installation of git with version 2.24.0.windows.2 with similar options as mentioned in the question.

I ran the which command on git-bash to get the path from where git-gui is being executed.

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

Check if /cmd is there in your PATH using echo $PATH in git bash or check if C:/Git/cmd is there in your PATH using echo %PATH% in Windows cmd. If not, then you can add it to your PATH variable (either Windows cmd or git-bash).

If the which command yields multiple paths, check if /cmd/git-gui executes well from git bash and remove the other paths(caution! refers to multiple paths found for git-gui) from the PATH variable.

I get the same error though when I assume that /cmd is not in my path

# 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

Another case where multiple paths exist for 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

Note: which command can be used to Write the full path of COMMAND(s) to standard output. and the argument -a is used to Print all matches in PATH, not just the first


I found a closed issue on git for Windows GitHub repository. Seems unrelated at first sight, however on seeing the commit message of the fix it provides some background on why you might be facing the error.

git-gui (Windows): use git-gui.exe in Create Desktop Shortcut

When calling Repository>Create Desktop Shortcut, Git GUI assumes that it is okay to call wish.exe directly on Windows. However, in Git for Windows 2.x' context, that leaves several crucial environment variables uninitialized, resulting in a shortcut that does not work.

To fix those environment variable woes, Git for Windows comes with a convenient git-gui.exe, so let's just use it when it is available.

This fixes #448

Signed-off-by: Johannes Schindelin

As highlighted in the commit message above, the author clearly points out to use git-gui.exe located in the /cmd directory.


As a final note, I would suggest OP to :

  • Check PATH variable of Windows cmd and git-bash for conflicting directories containing git-gui using where and which commands respectively (Windows cmd PATH env is passed on to git-bash)
  • Simulate an empty PATH variable as I have shown above and add only /cmd to the PATH variable of git-bash and then check if you are able to run git-gui from git-bash
  • Confirm if git-gui runs in Windows cmd
  • Check if you are adding the directory to the env variable PATH correctly (Windows cmd and git bash)
  • Try running git-gui and git gui, do both the commands in git-bash give the same error ?

I've been using git and the git gui command on windows for about 2 years with no issues. Recently, I installed ubuntu on windows 10 and enabled the windows subsystem for linx (wsl) and installed git in the ubuntu bash, thinking I'd run git command from there. Ever since, git is quite broken when I use the git bash as part of git for windows.

To reproduce this, I

  1. Setup a Windows 10 VM (Build 1909, Single Language Home Edition)
  2. Install git for windows version 2.24.0.windows.2

    • Git installation location : C:\Git
      • Similar options as you mention in the question except for the editor
        Observations
        • C:\Git\cmd is added to the PATH environment variable of Windows cmd (and therefore git-bash too)
    • Both the commands git-gui and git gui work from git-bash
  3. Turn on Windows feature Windows Subsystem for linux for Bash on Ubuntu Windows

  4. Install Ubuntu app from Microsoft store (Ubuntu 18.04)(git was pre-installed)
  5. Update git to the latest version using this
  6. git works both for bash and windows running at 2.24.0 and 2.24.0.windows.2 respectively
  7. Both the commands git gui and git-gui work as expected from git-bash
  8. Uninstalled ubuntu for bash and turned off wsl, and it still works

Further debugging can be done using git's environment variables.

GIT_EXEC_PATH determines where Git looks for its sub-programs (like git-commit, git-diff, and others). You can check the current setting by running git --exec-path.

  • Run this command git --exec-path on git-bash, and verify if it shows : C:/Git/mingw64/libexec/git-core

GIT_TRACE controls general traces, which don’t fit into any specific category. This includes the expansion of aliases, and delegation to other sub-programs.

  • Run this command GIT_TRACE=1 git gui, and show the output (which includes the resolved exec directory for git-gui)

GIT_CONFIG_NOSYSTEM, if set, disables the use of the system-wide configuration file. This is useful if your system config is interfering with your commands, but you don’t have access to change or remove it.

  • Try running this command GIT_CONFIG_NOSYSTEM=1 git gui

You can open a new issue here, if nothing else works.

like image 159
Saurabh P Bhandari Avatar answered Nov 07 '22 12:11

Saurabh P Bhandari