Git交互式命令无法在MinGw64上完成并显示消息“系统找不到指定的路径”

时间:2018-10-01 18:25:35

标签: windows git mingw mingw-w64

我正在尝试执行git add --patch -- <file>,但命令从未完成。 MINGW64 Shell仅显示“系统找不到指定的路径。”

当通过设置GIT_TRACE = 1并尝试运行某些组件命令来缩小原因时,我发现该错误是由--interactive选项引起的,并且无论正在运行什么git命令,都可以看到相同的效果

在以下交互式命令上设置GIT_TRACE = 1会显示输出:

$ GIT_TRACE=1 git add --interactive -- .gitignore

19:16:47.185964 git.c:350            trace: built-in: git 'add' '--interactive' '--' '.gitignore'
19:16:47.185964 run-command.c:336    trace: run_command: 'add--interactive' '--' '.gitignore'
19:16:47.215964 git.c:564            trace: exec: 'git-add--interactive' '--' '.gitignore'
19:16:47.215964 run-command.c:336    trace: run_command: 'git-add--interactive' '--' '.gitignore'
19:16:47.345964 git.c:350            trace: built-in: git 'rev-parse' '--git-dir'
19:16:47.375964 git.c:350            trace: built-in: git 'rev-parse' '--show-prefix'
19:16:47.405964 git.c:350            trace: built-in: git 'config' '--get-colorbool' 'color.interactive' 'false'
19:16:47.436965 git.c:350            trace: built-in: git 'config' '--get-colorbool' 'color.diff' 'false'
19:16:47.466965 git.c:350            trace: built-in: git 'config' '--get-color' 'reset'
19:16:47.496965 git.c:350            trace: built-in: git 'config' '--get' 'diff.algorithm'
19:16:47.546965 git.c:350            trace: built-in: git 'config' '--bool' '--get' 'diff.compactionheuristic'
19:16:47.576965 git.c:350            trace: built-in: git 'config' '--get' 'interactive.difffilter'
19:16:47.606965 git.c:350            trace: built-in: git 'config' '--bool' '--get' 'interactive.singlekey'
19:16:47.636965 git.c:350            trace: built-in: git 'rev-parse' '--git-dir'
19:16:47.666965 git.c:350            trace: built-in: git 'update-index' '--refresh'
19:16:47.793965 git.c:350            trace: built-in: git 'ls-files' '--' '.gitignore'
The system cannot find the path specified.
19:16:47.843965 git.c:350            trace: built-in: git 'diff-index' '--cached' '--numstat' '--summary' '4b825dc642cb6eb9a060e54bf8d69288fbee4904' '--' '.gitignore'
19:16:47.873966 git.c:350            trace: built-in: git 'diff-files' '--numstat' '--summary' '--raw' '--' '.gitignore'

尝试添加不带交互式选项的文件,按预期方式进行。仅当添加了交互式(或补丁)选项时,操作才会失败。

请注意,尝试运行命令时,我最初遇到以下问题:

Can't locate Git.pm in @INC (you may need to install the Git module) (@INC contains: /mingw64/share/perl5/site_perl D:/Apps/StrawberryPerl/perl/site/lib D:/Apps/StrawberryPerl/perl/vendor/lib D:/Apps/StrawberryPerl/perl/lib) at C:\Program Files\Git\mingw64/libexec/git-core\git-add--interactive line 7.
BEGIN failed--compilation aborted at C:\Program Files\Git\mingw64/libexec/git-core\git-add--interactive line 7.

但是,将Git.pm和Error.pm模块复制到perl包含文件夹后,问题变成了该问题顶部描述的问题。

最后,为了进一步解决这个问题,我在Windows命令提示符(cmd.exe)中运行了该命令,但出现了完全不同的错误:

c:\code\proj>git add --patch .gitignore

error: wrong number of arguments
usage: git config [<options>]

Config file location
    --global              use global config file
    --system              use system config file
    --local               use repository config file
    -f, --file <file>     use given config file
    --blob <blob-id>      read config from given blob object

Action
    --get                 get value: name [value-regex]
    --get-all             get all values: key [value-regex]
    --get-regexp          get values for regexp: name-regex [value-regex]
    --get-urlmatch        get value specific for the URL: section[.var] URL
    --replace-all         replace all matching variables: name value 
[value_regex]
    --add                 add a new variable: name value
    --unset               remove a variable: name [value-regex]
    --unset-all           remove all matches: name [value-regex]
    --rename-section      rename section: old-name new-name
    --remove-section      remove a section: name
    -l, --list            list all
    -e, --edit            open an editor
    --get-color           find the color configured: slot [default]
    --get-colorbool       find the color setting: slot [stdout-is-tty]

Type
    --bool                value is "true" or "false"
    --int                 value is decimal number
    --bool-or-int         value is --bool or --int
    --path                value is a path (file or directory name)

Other
    -z, --null            terminate values with NUL byte
    --name-only           show variable names only
    --includes            respect include directives on lookup
    --show-origin         show origin of config (file, standard input, blob, command line)

config --get-color color.interactive.prompt bold blue: command returned error: 129

我检查了我的git配置文件,但未设置此选项,因此我猜测它是在某处设置的默认设置。

除了问题的明显方面(即使--interactive--patch选项按预期方式工作)之外,我还希望获得有关进一步调试此问题的任何建议或技巧。除了显示是问题的--interactive选项之外,我使用的各种TRACE选项并没有真正突出问题所在。

1 个答案:

答案 0 :(得分:0)

简而言之-答案是升级所用Windows的Git版本。我的版本是2.10.1.windows.1,已有两年的历史了。我升级到2.19.0.windows.1,现在一切都可以正常工作了。

所以问题可能是因为该版本的git中存在错误,在这种情况下,希望这会给其他使用该版本的人一个提示。另外,我的安装可能会出现问题,新安装的git会自动纠正该问题。在这种情况下,如果遇到类似的问题,请考虑一下尝试一下。

这不是一个特别令人满意的答案-但是仍然是一个答案。