git lfs checkout fails on windows with unicode path "Error: CreateFile"
git lfs checkout fails on windows with unicode path "Error: CreateFile"
我已正确安装 git for windows。打电话
git lfs checkout
在包含特殊字符 (C:\Users\myUser\öäü) 的路径上使用 bash.exe 失败并出现错误:
Error: CreateFile C:\Users\myUser\���: The system cannot find the file specified.
我尝试使用 GitKraken 将 LFS 文件检出到同一个目录,但失败并出现相同的错误(我看到 GitKraken 也调用了 bash.exe)。使用 git-bash.exe 时,我无法重现错误。两个终端都是 MINGW64,bash.exe 的语言环境打印
$ locale
LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=
而 git-bash.exe 打印 en_GB.UTF-8。我也试过 set
MSYSTEM=MINGW64
但不幸的是,这根本没有帮助。
在 Mingw-w64 模式下使用 /usr/bin/mintty 会启动功能正常的 bash,我也无法重现该问题。因此,我想知道如何配置 bash.exe 才能正常运行,我觉得一定有某种方法可以实现。
编辑:
git lfs 版本打印
git-lfs/2.12.0 (GitHub; windows amd64; go 1.15.1)
使用 GIT_TRACE=1 打印调用 git lfs checkout:
$ GIT_TRACE=1 git lfs checkout
14:12:20.043934 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/bin
14:12:20.059555 git.c:704 trace: exec: git-lfs checkout
14:12:20.059555 run-command.c:663 trace: run_command: git-lfs checkout
14:12:20.079718 trace git-lfs: exec: git 'version'
14:12:20.109504 trace git-lfs: exec: git '-c' 'filter.lfs.smudge=' '-c' 'filter.lfs.clean=' '-c' 'filter.lfs.process=' '-c' 'filter.lfs.required=false' 'rev-parse' '--git-dir' '--show-toplevel'
14:12:20.132914 trace git-lfs: exec: uname
14:12:20.189343 trace git-lfs: exec: cygpath '-w' '.git'
14:12:20.208415 trace git-lfs: exec: cygpath '-w' 'C:/Users/myUser/äöü'
14:12:20.243879 trace git-lfs: Error running 'git rev-parse': CreateFile C:\Users\myUser\���: The system cannot find the file specified.
Error: CreateFile C:\Users\myUser\���: The system cannot find the file specified.
...
@bk2204 能够在 git-lfs 内核中修复它,参见:https://github.com/git-lfs/git-lfs/issues/4227
作为变通设置
LC_ALL=C.UTF-8
为我解决了这个问题。
我已正确安装 git for windows。打电话
git lfs checkout
在包含特殊字符 (C:\Users\myUser\öäü) 的路径上使用 bash.exe 失败并出现错误:
Error: CreateFile C:\Users\myUser\���: The system cannot find the file specified.
我尝试使用 GitKraken 将 LFS 文件检出到同一个目录,但失败并出现相同的错误(我看到 GitKraken 也调用了 bash.exe)。使用 git-bash.exe 时,我无法重现错误。两个终端都是 MINGW64,bash.exe 的语言环境打印
$ locale
LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=
而 git-bash.exe 打印 en_GB.UTF-8。我也试过 set
MSYSTEM=MINGW64
但不幸的是,这根本没有帮助。 在 Mingw-w64 模式下使用 /usr/bin/mintty 会启动功能正常的 bash,我也无法重现该问题。因此,我想知道如何配置 bash.exe 才能正常运行,我觉得一定有某种方法可以实现。
编辑: git lfs 版本打印
git-lfs/2.12.0 (GitHub; windows amd64; go 1.15.1)
使用 GIT_TRACE=1 打印调用 git lfs checkout:
$ GIT_TRACE=1 git lfs checkout
14:12:20.043934 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/bin
14:12:20.059555 git.c:704 trace: exec: git-lfs checkout
14:12:20.059555 run-command.c:663 trace: run_command: git-lfs checkout
14:12:20.079718 trace git-lfs: exec: git 'version'
14:12:20.109504 trace git-lfs: exec: git '-c' 'filter.lfs.smudge=' '-c' 'filter.lfs.clean=' '-c' 'filter.lfs.process=' '-c' 'filter.lfs.required=false' 'rev-parse' '--git-dir' '--show-toplevel'
14:12:20.132914 trace git-lfs: exec: uname
14:12:20.189343 trace git-lfs: exec: cygpath '-w' '.git'
14:12:20.208415 trace git-lfs: exec: cygpath '-w' 'C:/Users/myUser/äöü'
14:12:20.243879 trace git-lfs: Error running 'git rev-parse': CreateFile C:\Users\myUser\���: The system cannot find the file specified.
Error: CreateFile C:\Users\myUser\���: The system cannot find the file specified.
...
@bk2204 能够在 git-lfs 内核中修复它,参见:https://github.com/git-lfs/git-lfs/issues/4227
作为变通设置
LC_ALL=C.UTF-8
为我解决了这个问题。