Git 交互式命令无法完成,并在 MinGw64 上显示消息 "The system cannot find the path specified"

Git interactive commands fail to complete with message "The system cannot find the path specified" on MinGw64

我正在尝试执行 git add --patch -- <file>,但命令从未完成。 MINGW64 shell 只显示 "The system cannot find the path specified."

当通过设置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 选项按预期工作)之外,我也非常感谢任何关于进一步调试此问题的建议或提示。我使用的各种 TRACE 选项并没有真正突出问题出在哪里,除了告诉我问题出在 --interactive 选项之外。

简而言之 - 这里的答案是升级 Git 的版本以供 Windows 使用。我的版本是 2.10.1.windows.1,已经有几年了。我升级到 2.19.0.windows.1,现在一切正常。

所以问题可能是因为 git 的那个版本有错误,在这种情况下,希望这会给使用那个版本的其他人一个提醒。或者,我的安装可能存在问题,新的 git 安装会自动更正该问题。在这种情况下,如果您遇到类似问题,请考虑将此作为尝试的想法。

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