我想要的是一些“权威”的信息,至少要说明:
1. 到底有什么“问题”?(症状是什么) 2. 原因是什么?(简要说明) 3. 在哪些情况下会成为拦路虎? 4. 是否有任何解决方案或变通方法?
希望我的问题不太模糊,我认为将所有这些信息放在一个地方供人们参考是很好的...
bbolli
)。gitster
--在commit 64b2419中合并,2023年10月4日)
unicode
:将宽度表更新至Unicode 15.1签名:Beat Bolli
Unicode 15.1已于2023年9月12日宣布发布,因此将字符宽度表更新至新版本。
bbolli
)。gitster
--合并于提交 5ae4bd1,2023年3月31日)
unicode
:将宽度表更新至Unicode 15签署者:Beat Bolli
Unicode 15版本于2022年9月发布,我们迄今为止忽视了更新宽度表的工作。
现在进行更新。
carenas
)。gitster
--在提交 3d875f9中合并,2021年9月28日)
更新宽度表至Unicode 14。update_unicode.sh
已被移动到contrib/update-unicode
:请参阅其README。Unicode 6.3 defines more code points as combining or accents.
For example, the character "ö
" could be expressed as an "o
" followed byU+0308 COMBINING DIARESIS
(aka umlaut, double-dot-above).
We should consider that such a sequence of two codepoints occupies one display column for the alignment purposes, and for that,git_wcwidth()
should return 0 for them.Affected codepoints are:
U+0358..U+035C U+0487 U+05A2, U+05BA, U+05C5, U+05C7 U+0604, U+0616..U+061A, U+0659..U+065F
Earlier unicode standards had defined these as "reserved".
Only the range
0..U+07FF
has been checked to see which codepoints need to be marked as 0-width while preparing for this commit; more updates may be needed.
git config [--global] core.quotepath off
git config [--global] i18n.logoutputencoding utf8
git config [--global] i18n.commitencoding utf8
git config [--global] --unset svn.pathnameencoding
recodetree check
命令会扫描整个git仓库的历史记录,并打印出所有非ASCII文件名。如果输出为空,则无需进行迁移。
Karsten Blees的Git for Windows的UTF-8补丁现已合并到'devel'分支。
这意味着即将发布的版本将支持Unicode文件名!
2011年5月
我相信msysgit issue 80上有关于那个bug的最新信息。
也在issue 376中有描述。
例如:
发生的情况如下:
Windows上的git操作的是文件名,并将其视为字节流。 在你的情况下,这些流碰巧是UTF8编码的文本。
Windows上的git要求运行时创建一个文件,并将字节流传递给它。
由于Windows内部一切都是Unicode,运行时使用当前设置的区域设置(也称为“代码页”)将字节流转换为UTF16。
也就是说,它将字节流有效地解释为CP949(韩文)编码的文本。
显然,一些UTF8字节序列是无效的CP949序列,转换失败(“无效参数”);或者如果UTF8序列碰巧是正确的CP949序列,结果就是(很可能)一个不同的字符。
真正的解决方案应该在MingW上:
我想到了一个解决方案:在GCC C运行时库层面解决它。
也就是说,对于Windows上的mingw GCC运行时库,通过构建时选项,使其能够在一种模式下,命令行参数(传递给main()
)和文件I/O函数使用底层的Windows Unicode API调用,并在C的标准函数API中将其转换为/从使用字节字符串的UTF-8编码。
这对于git可能会“正常工作”,并且对于在Windows环境下运行的其他Linux源开源项目也可能会有用。
有一些正在进行中的工作,旨在支持Unicode的msysgit变体。“MinGW编译器提供对Microsoft C运行时和一些特定语言运行时功能的访问。
MinGW是极简主义的,不会也永远不会试图为在MS-Windows上部署POSIX应用程序提供POSIX运行时环境。
如果您想在此平台上部署POSIX应用程序,请考虑使用Cygwin。”