msysgit bash shell- how to troubleshoot “cannot find command”

▼魔方 西西 提交于 2019-12-29 07:12:09

问题


I need help getting git extensions to run with msysgit. I have had bad luck with extensions git-tfs and git-fetchall, in both cases it is the same problem. The addon will require a file to be placed where git can find it (git-tfs.exe and git-fetchall.sh). I understand this to mean the files need to be in a directory that is in the 'PATH' environment variable. In both cases I get stuck at this point:

$ git-diffall
bash: git-diffall: command not found

or:

$ git-tfs
bash: git-tfs: command not found

When I run echo %PATH% from a regular command shell, it shows my path variable includes the directories where git-diffall and git-tfs are. How can I debug this, or am I missing something? Is there a way within msysgit to verify the command search path is what I expect?


回答1:


Ok, I found the disconnect. It was elusive until I started running "echo $PATH" from the shell (rather then echo %PATH% from the windows command shell, which had a different result).

Two problems:

  1. When I configured the environment variables, I originally had a '\' at the end of the path. This seemed to caused echo $PATH to show invalid pathnames like '/c:/directory' instead of '/c/directory/.

  2. A reboot was necessary for changes to the system environment variables made through the windows UI to be reflected in the msysgit/bash/git shell.




回答2:


In addition to being in the $PATH, they also need to be executable. So, in Cygwin (I'm asssuming Windows because you used "%PATH%" instead of "$PATH" in your question, which is a Windows-specific thing), you should navigate to the directory in which the program git-difall is located, and then type:

chmod a+x git-diffall

Also, unlike Windows which ignores the ".exe", ".com", ".bat", etc. extensions, BASH does care about these extensions, so if you have git-diffall.sh on your path, you would need to invoke it as git-diffall.sh and not as git-diffall. If you want to invoke it as git-diffall, then simply remove the file extension. You can do this using the Cygwin commandline as well, using:

mv git-diffall.sh git-diffall

Also, the first chmod needs to use git-diffall or git-diffall.sh depending on the actual name.




回答3:


I faced today with the same problem, but solution isn't here, so I'll add my two cents.

If you have %HOME% path set in windows - make sure that:

  1. it is created within -user- environment settings, not -system- ones. git itself seems working with system variable correctly, but GitExtensions take HOME from user variables only.
  2. it is not equal to Git base directory. The thing is msysgit treats C:\Program Files (x86)\Git (or wherever you have it installed) as root / and adds /bin to it literally similarly to command PATH=$HOME/bin:$PATH. Thus if your %HOME% is C:\Program Files (x86)\Git you'll have $PATH starting with //bin: which is obviously incorrect.



回答4:


Warning, starting with git 2.0.X/2.1 (Q3 2014), git diffall will always return "command not found": it has been removed.

See commit 502b0a1 by Jonathan Nieder (jrn) (with the assistance of Tim Henigan (thenigan)):

contrib: remove git-diffall

The functionality of the "git diffall" script in contrib/ was incorporated into "git difftool" when the --dir-diff option was added in v1.7.11 (ca. June, 2012).
Once difftool learned those features, the diffall script became obsolete.

The only difference in behavior is that when comparing to the working tree, difftool copies any files modified by the user back to the working tree when the diff tool exits.
"git diffall" required the --copy-back option to do the same.
All other diffall options have the same meaning in difftool.

Make life easier for people choosing a tool to use by removing the old diffall script. A pointer in the release notes should be enough to help current users migrate.



来源:https://stackoverflow.com/questions/2664283/msysgit-bash-shell-how-to-troubleshoot-cannot-find-command

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!