从Mercurial迁移后,Git无法在Windows 11上正确识别带有元音变音的文件

eoigrqb6  于 2023-01-19  发布在  Git
关注(0)|答案(1)|浏览(110)

我尝试在Git Bash中以以下方式从Mercurial仓库迁移到Windows 11上的Git:

MINGW64$ ls
hg-repo/ git-repo/
MINGW64$ cd git-repo
MINGW64$ git init
MINGW64$ ~/fast-export/hg-fast-export.sh -r ../hg-repo/ --force -A ../hg-repo/authors.txt -M main

迁移成功,需要执行以下操作

MINGW64$ git checkout main

这应该会得到一个没有任何更改的存储库。但相反,我得到了如下所示的内容:

MINGW64$ git status
On branch main
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
    deleted:    Folder1/grünes-Ding.png
Untracked files:
(use "git add <file>..." to include in what will be committed)
    Änderungen/
    Folder1/grünes-Ding.png

所以它看起来像"Folder1/grünes-Ding. png"被删除,然后再次添加。如果我尝试恢复文件夹,我得到以下。

MINGW64$ git restore Folder1/grünes-Ding.png
error: pathspec 'Folder1/grünes-Ding.png' did not match any file(s) known to git

我认为在这个例子中Git并不理解"Folder1/grünes-Ding. png",因为ü在Git中是以另一种方式表示的,正如我在git-bash中看到的那样。"Änderungen/"也应该在仓库中,因为如果我在工作目录中删除它,它与它的所有文件一起显示为"已删除"的更改。如果我然后尝试恢复这些文件,我会得到相同的错误类型。此文件夹中的文件不包含变音符号。
我的问题是:我怎样才能让Git使用变音处理文件夹和文件?
到目前为止,我发现的关于变音的唯一问题是在日志或提交消息中正确地显示它们,但这不是这里的问题。
我的Git配置如下所示:

MINGW64$ git config -l
diff.astextplain.textconv=astextplain
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=input
core.fscache=true
core.symlinks=false
pull.rebase=false
init.defaultbranch=main
difftool.sourcetree.cmd=''
mergetool.sourcetree.cmd=''
mergetool.sourcetree.trustexitcode=true
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.quotepath=false
core.fsmonitor=true
i18n.logoutputencoding=UTF-8
MINGW64$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_ALL=
t3psigkw

t3psigkw1#

我玩了一下hg-fast-export的选项,最终找到了一个解决方案。
hg-fast-export有两个处理编码的选项:-e--fe-e定义了Mercurial中提交消息和作者名等的编码,以将其转换为UTF-8,--fe定义了文件名的编码。
我尝试了不同的文件名编码,发现latin1对我有效。但首先,我犯了一个错误,使用了-fe而不是--fe。但是-fe会导致-f-e,而不是--fe。所以请注意这一点!如果您使用-e,同样,选项--fe被自动设置为-e的值,这随后导致提交消息的错误编码。
最后,迁移的工作方式如下

MINGW64$ ls
hg-repo/ git-repo/
MINGW64$ cd git-repo
MINGW64$ git init
MINGW64$ ~/fast-export/hg-fast-export.sh -r ../hg-repo/ --force -A ../hg-repo/authors.txt -M main --fe latin1

相关问题