Git 跨平臺相容性

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

Windows、macOS 和 Linux 檔案系統具有一或多個其他平臺不一定支援的限制和行為。 由於 Git 是跨平台技術,因此開發人員可以在一個平台上進行認可,其中包含與另一個平臺文件系統不相容名稱的檔案或資料夾。 保護您的存放庫免於此不相容很重要,因為其他平臺上的開發人員可能會不知不覺中取出因為不支援的檔案或路徑名稱而損毀其工作目錄的認可。

Azure Repos 提供三個 跨平臺相容性設定 ,可協助保護您的存放庫免於推入與一或多個平臺不相容之認可的人員。 這些設定與檔案系統的下列限制有關:

  • 區分大小寫
  • 檔案和資料夾名稱的限制
  • 路徑長度限制

區分大小寫

Windows 和 macOS 檔案系統預設不區分大小寫(但保留大小寫)。 大部分的Linux檔案系統區分大小寫。 Git 原本是建置成 Linux 核心的版本控制系統,因此會區分大小寫。

雖然 Git for Windows 解決了許多不區分大小寫的操作系統問題,但仍有一些古怪。

檔案和資料夾名稱

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

有兩種方式可以修正有案例衝突的存放庫:

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

最好先避免建立案例衝突。 Azure Repos 提供案例 強制執行設定 ,以防止導致這種情況的推送。 對於開發人員來說,採用使用索引標籤完成認可檔案的習慣也有助於。 由於 Windows 和 macOS 都保留大小寫,因此這些方法可確保 Git 的內部程式看到與文件系統所使用的大小寫完全相同。

分支和標記名稱

您可以建立兩個分支或標籤(稱為 refs),這些分支與大小寫不同。 Git 的內部程式,以及 Azure DevOps Services 和 Azure DevOps Server,將它們視為兩個不同的 refs。 在用戶的計算機上,Git 會使用檔案系統來儲存 refs。 擷取和其他作業開始失敗,因為模棱兩可。

小型檔案代表每個 ref。如果 ref 名稱包含斜線 (/) 字元,資料夾代表最後斜線之前的元件。

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

若要修正分支名稱:

  1. 在分支的頁面上,移至相關的認可。
  2. 在快捷方式功能表上,選取 [ 新增分支]。
  3. 為分支指定沒有大小寫衝突的新名稱。
  4. 返回分支的頁面,並刪除衝突的分支。

若要修正標籤名稱:

  1. 在標籤面上,移至標記的認可。
  2. 在快捷方式功能表上,選取 [ 建立卷標]。
  3. 為標籤指定沒有大小寫衝突的新名稱。
  4. 返回標記的頁面,並刪除衝突的標記。

路徑和檔名限制

Windows、macOS 和 Linux 作業系統對於檔名和路徑有各種限制。 這些限制會限制您可以命名檔案或資料夾的內容,這可能會為跨多個平臺使用 Git 的小組建立問題。

例如,假設某個平臺上的開發人員認可對共用存放庫的變更,其中包含另一個平臺上無效的檔名或路徑長度。 稍後,另一位開發人員會嘗試在內容無效的平臺上查看該認可。 這種情況會導致損毀的工作目錄,而該目錄可能會因損毀的數據而損壞您的存放庫。

Azure Repos 提供 存放庫設定 ,可封鎖包含違反下列一或多個限制之認可的認可。

檔名和路徑的參考數據表

限制/平臺 Windows macOS Linux
檔名限制 保留檔名:CON、PRN、AUX、NUL、COM1-COM9、LPT1-LPT9

保留檔名後面接著 .

保留字元: \ / : * ? " < >

結尾為 或空格符的 . 檔名
結尾為 的檔名 / 結尾為 的檔名 /
路徑長度限制 Windows 中的路徑長度上限為 260 個字元(包括 Null 終止符)。

對於具有 .NET 的目錄,完整檔名必須少於 260 個字元,而且目錄名稱必須少於 248 個字元。
檔名限制為 255 個字元。

HFS+ 中的路徑上限會記錄為無限制,但有些 macOS 版本上限路徑為 1,016 個字元。 某些文件系統支援 1,016 作為路徑上限。
檔名限制為 255 個字元。

路徑上限為 4096。

編碼支援

注意

本節描述的編碼支援在 Azure DevOps Server 2019.1 和更新版本中受到支援。

Microsoft 已透過 Web 推送端點新增 UTF-16 和 UTF-32 編碼的支援。 此支援表示我們保留編碼類型,因此您不需要將檔案重寫為UTF-8。 當您嘗試儲存不是透過 Web 編碼的 UTF 檔案時,也會看到警告(僅支援 UTF 編碼)。

下列螢幕快照顯示當您使用 Web 推送引入編碼變更時出現的對話框範例。

此螢幕快照顯示透過 Web 推送導入編碼變更的對話方塊。