繁体   English   中英

由于不同的变音编码,Git 看到我无法访问的文件的文件更改?

[英]Git seeing file changes on files that I can't access because of differing umlaut-encodings?

我目前的 git 有一个大问题。 我有一个克隆的 git 存储库,它正在跟踪行为非常奇怪的文件。

这是关于两个文件,分别称为Lebensstiltagebuch_Frühstück_1.jpgLebensstiltagebuch_Frühstück_2.jpg

Git 总是告诉我,他们已经改变了,我应​​该先清理我的工作树,然后才能拉出新的东西。 但是无论我做什么,这两个文件都保留在Changes not staged for commit:列表中:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   "Lebensstiltagebuch_Fru\314\210hstu\314\210ck_1.jpg"
    modified:   "Lebensstiltagebuch_Fru\314\210hstu\314\210ck_2.jpg"

我已经尝试做:

  • git reset --hard HEAD ,丢弃所有未跟踪的更改,但它什么也没做
  • git rm --cached Lebensstiltagebuch_Frühstück_2.jpg

但没有任何效果。 我还尝试从文件夹中删除现有文件,然后列表如下所示:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    deleted:    "Lebensstiltagebuch_Fr\303\274hst\303\274ck_1.jpg"
    deleted:    "Lebensstiltagebuch_Fr\303\274hst\303\274ck_2.jpg"

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   "Lebensstiltagebuch_Fru\314\210hstu\314\210ck_1.jpg"
    modified:   "Lebensstiltagebuch_Fru\314\210hstu\314\210ck_2.jpg"

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    "Lebensstiltagebuch_Fr\303\274hst\303\274ck_1.jpg"
    "Lebensstiltagebuch_Fr\303\274hst\303\274ck_2.jpg"

在这里,我可以看到我正在处理的文件在解码时具有不同的文件名(?),然后结束是\\274ck_2.jpg\\210ck_2.jpg

尽管我一直在处理同一个文件,并且在 finder 中以及在终端中运行ls -la时,文件名完全相同,但是ü,ö,ä ,因为我是德国人...

我正在使用 macOS 12 Beta。 有人知道如何解决这个问题吗?

TL;DR:尝试将core.precomposeUnicode设置为truefalse

[这是因为不同的变音编码吗?]

是的。 JosefZ 已经指出\\303\\274是用变音符号编码小写 U 的一种方式(作为单个“符文”,正如 Go 所称的那样),而u\\314\\210是另一种编码小写字母的不同方式U 带有变音符号(两个独立的“符文”,Go 将其称为)。

根本问题是,在 Linux 系统上,您可以使用拼写 -组合,如第一种情况,或分解,如第二种情况 - 但 macOS 坚持只有一种拼写:分解形式。 朝使用的组成形式(大多数Linux软件斜靠,但操作系统不坚持一个或其他方式,你可以在事实存储两个不同的文件名列相同,但一个文件拼写方式之一,而另一个拼写另一个。)

实际存储库拥有存储库所拥有的任何内容。 .gitignore.gitattributes文件拥有它们所拥有的一切。 但是文件系统中的文件,在你的工作树中,在 macOS 上将用分解的形式拼写。 操作系统坚持。 你不能让它表现得否则。 此处只能有一个显示字符为ü文件名,使用分解形式。

无论是否有二进制文件可能会或可能不会被视为在首位的二进制文件,这取决于任何更改.gitattributes设置的文件被存储为文件中,这可能不是的方式匹配你的 macOS 工作树——以及当你使用git add时你是否真的在 Git 中更改了文件的名称和/或内容是单独的问题,每个问题都有自己单独的答案。

Git 有一个特定于 macOS 的旋钮:

core.precomposeUnicode

您可以使用git config将此选项设置为true以告诉 Git “撤消”分解并使用组合形式存储在 Git 索引中的文件名。 (我假设,但尚未测试,如果/根据需要,这也适用于.gitattributes 。)

问题是,这应该已经设置为true 如果是这样,您可以将其设置为false 如果 Linux 系统使用分解的文件名,这就是您需要做的。

有关这方面的更多信息,请参阅https://www.git-tower.com/help/guides/faq-and-tips/faq/unicode-filenames/mac (其中更详细并提供了一些测试方法当你同时拥有 Linux 和 macOS 时,你自己)。 请注意,此页面拼写了旋钮core.precomposeunicode (全部小写),但 Git 配置设置中的字母大小写无关紧要,因此您可以根据需要拼写coRE.pRecoMPOseUNIcode 1


1我个人的喜好一般是“全部小写”,这样小指就不会因为按SHIFT键太多而感到厌烦。 这也回避了如何大写 ß 字符的问题。 😀 但是Git 使用camelCase,一种Go 编程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM