我正在尝试将源代码回滚到git上的旧版本。
$ git checkout -f c258d300c8e85d68eeb15763eb14a059a2984f6d
fatal: cannot create directory at 'client-common/src/test/java/com/adi?caas': Illegal byte sequence上面的adi?caas是问题的原因。
git diff --name-only c258d300c8e85d68eeb15763eb14a059a2984f6d~ c258d300c8e85d68eeb15763eb14a059a2984f6d
client-common/src/test/java/com/adi<F0>caas/client/common/utils/MockConfigurationFileBuilder.java它也可以是非标准字符adi<F0>cass。我如何克服这个问题?有没有一种方法可以自动将这个字符映射到/。因为这就是它应该是的,我确实有client-common/src/test/java/com/adi/caas/。
我使用的是mac 10.14.6和git版本2.16.2。
发布于 2019-08-31 05:49:21
在macOS上,所有文件名都以特定的UTF-8规范化进行编码。不能使用无效的UTF-8名称创建文件,例如仅包含ASCII字符和0xF0字节的文件名。
然而,在大多数Unix系统上,文件名被编码为任意的字节序列,因此Git允许您使用任何非NUL字节序列来命名文件。过去有人将非UTF-8文件名放入您的存储库,而现在该修订版本无法签出。
你根本不能在macOS上查看这个版本。Git将很乐意检出由于大小写不敏感而重叠的文件,但如果无法创建目录,它将不允许检出。如果想签出文件,可以尝试使用Linux或Docker容器,或者可以使用git archive生成一个压缩包,然后使用归档工具将需要的文件解压到适当的目录中。你也可以在Linux系统上用固定路径(使用git mv)创建该版本的副本,然后在你的Mac上签出它。
发布于 2019-08-31 04:01:59
看起来违反了(UTF-8)编码规则导致了最初的问题。您是否可以尝试将LC_CTYPE设置为C,如下所示(这会导致字符串中的每个字节都是它自己的字符,而不应用任何编码规则):
LC_CTYPE=C LANG=C git checkout -f c258d300c8e85d68eeb15763eb14a059a2984f6d然后,根据Java命名约定更正包名,并提交它,以避免将来出现类似问题。
https://stackoverflow.com/questions/57732278
复制相似问题