[英]Git seeing file changes on files that I can't access because of differing umlaut-encodings?
我目前的 git 有一個大問題。 我有一個克隆的 git 存儲庫,它正在跟蹤行為非常奇怪的文件。
這是關於兩個文件,分別稱為Lebensstiltagebuch_Frühstück_1.jpg
和Lebensstiltagebuch_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
設置為true
或false
。
[這是因為不同的變音編碼嗎?]
是的。 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.