Git 區分大小寫

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

根據預設,Windows 和 macOS 檔案系統不區分大小寫(但保留大小寫)。 大部分的 Linux 檔案系統會區分大小寫。 Git 最初建置成 Linux 核心的版本控制系統,因此毫不奇怪,它會區分大小寫。

雖然 Git for Windows已解決許多不區分大小寫的 OS 問題,但仍有一些古怪。

檔案和資料夾名稱

在 Linux 上,簽出包含「File.txt」和「file.txt」的 Git 存放庫並無問題。 這些是不同的檔名。 在 Windows 和 macOS 上,簽出這兩個檔案會導致第二個檔案覆寫第一個檔案。 如果兩個資料夾只有大小寫不同,則其內容最終會在不區分大小寫的文件系統上混合在一起。

修正案例衝突

修正此問題存放庫的其中一個方法是在區分大小寫的環境中取出。 重新命名檔案和資料夾,使其不再衝突,然後將這些變更推送至存放庫。 Windows 子系統 Linux 版 是這樣的環境之一。 另一種方法是針對每個衝突使用 命令 git mv -f <conflicting name> <non-conflicting name> ,並小心使用這兩個檔名的確切大小寫。

避免案例衝突

最好避免在一開始建立這種情況。 Azure Repos 提供案例 強制執行設定 ,以防止推播導致這種情況。 對於開發人員來說,採用使用 Tab 鍵自動完成認可檔案的習慣也會有所説明。 由於 Windows 和 macOS 都保留大小寫,因此這可確保 Git 的內部程式看到文件系統所使用的大小寫完全相同。

分支和標記名稱

您可以建立兩個分支或標籤(稱為』refs'),這些分支或標籤在大小寫上不同。 Git 的內部和 Azure DevOps Services/TFS 會將它們視為兩個不同的 ref。 在用戶的計算機上,Git 會使用檔案系統來儲存 refs。 擷取和其他作業開始失敗,因為模棱兩可。 每個 ref 都會以小型檔案表示,如果 ref 名稱包含 / 字元,則最後 / 部分前的部分會以資料夾表示。

避免問題的其中一個簡單方式是一律使用全小寫分支和標記名稱。 如果您已建立兩個分支或標記,併發生此問題,您可以在 Azure Repos Web UI 中加以修正。

修正分支名稱

從分支頁面,流覽至相關的認可。 在操作功能表中,選擇 [新增分支]。 為分支指定沒有大小寫衝突的新名稱。 返回分支頁面,並刪除衝突的分支。

修正標籤名稱

修正標記名稱的步驟類似於分支。 從標籤面,流覽至已標記的認可。 在操作功能表中,選擇 [建立卷標]。 為標籤指定沒有大小寫衝突的新名稱。 返回標記頁面,並刪除衝突的標記。