首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git签出失败,出现“非法字节序列”

Git签出失败,出现“非法字节序列”
EN

Stack Overflow用户
提问于 2019-08-31 03:26:51
回答 2查看 1.5K关注 0票数 0

我正在尝试将源代码回滚到git上的旧版本。

代码语言:javascript
复制
$ git checkout -f c258d300c8e85d68eeb15763eb14a059a2984f6d
fatal: cannot create directory at 'client-common/src/test/java/com/adi?caas': Illegal byte sequence

上面的adi?caas是问题的原因。

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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上签出它。

票数 4
EN

Stack Overflow用户

发布于 2019-08-31 04:01:59

看起来违反了(UTF-8)编码规则导致了最初的问题。您是否可以尝试将LC_CTYPE设置为C,如下所示(这会导致字符串中的每个字节都是它自己的字符,而不应用任何编码规则):

代码语言:javascript
复制
LC_CTYPE=C LANG=C git checkout -f c258d300c8e85d68eeb15763eb14a059a2984f6d

然后,根据Java命名约定更正包名,并提交它,以避免将来出现类似问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57732278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档