如何在 Windows/Linux/Mac 作業系統上的 Git 中處理行尾字元?


這個問題也可以重新表述為 - 如何解決 Git 警告 - “LF 將被 CRLF 替換”?

行尾使用兩個特殊字元“\r
" 在 Windows 作業系統中標記,而“
" 字元用於在 MacOS 和 Linux 系統中標記行尾。

\r 和
分別被稱為 **回車 (CR)** 和 **換行 (LF)** 字元。正確處理行尾字元對於跨多個作業系統的保持一致性非常重要。

行尾字元可以透過兩種方式配置 -

  • **安裝時** -

在安裝過程中,Git 允許我們從以下選項中選擇以配置行尾轉換,如上所示 -

  • **檢出 Windows 樣式,提交 Unix 樣式行尾** - **CRLF** 將在檢出和提交操作中轉換為 **LF**。當 Git 安裝在 Windows 上並且專案協作者使用非 Windows 機器時,這是推薦的設定。

  • **按原樣檢出,提交 Unix 樣式行尾** - 檢出時不執行任何轉換。但是,當提交檔案時,Git 會將 CRLF 轉換為 LF。當 Git 安裝在 Unix 樣式機器上並且專案協作者使用 Windows 機器時,這是推薦的設定。

  • **按原樣檢出,按原樣提交** - 在檢出或提交檔案時不執行任何轉換。當 Git 安裝的作業系統和協作者機器的作業系統相同時,建議使用此選項。

  • 安裝後 - 配置 autocrlf 屬性

**"core.autocrlf"** 屬性應配置為管理行尾轉換。考慮以下場景

場景 1 - Git 安裝在 Windows 機器上,協作者在不同的平臺上工作

A 先生和 B 先生正在同一個專案上工作。A 先生使用 Windows 機器,B 先生使用 Mac 機器。如前所述,Windows 和 Mac 作業系統使用不同的字元來標記行尾。這意味著,如果 A 先生將程式碼檢入儲存庫,Git 應該從行尾刪除回車符 (**\r**)。同樣,當他從儲存庫檢出程式碼時,Git 應該更新行尾並添加回車符。

在 Windows 作業系統上,可以透過使用以下命令將 "**core.autocrlf**" 設定為 true 來實現:

$ git config --global core.autocrlf true

現在讓我們建立一個檔案,將其新增到暫存區並觀察輸出。

$ echo hello >abc.txt
$ git add abc.txt

Git 將顯示一條訊息,指出 LF 將在檔案“abc.txt”中被 **CRLF** 替換。如下所示 -

Warning: LF will be replaced by CRLF in abc.txt.
The file will have its original line endings in your working directory

場景 2 - Git 安裝在 Unix 或 Mac 機器上,協作者在不同的平臺上工作

現在讓我們考慮一個場景,其中使用 MacOS 機器工作的 B 先生嘗試檢出程式碼。如果程式碼正在檢出到 Mac 或 Linux 機器,Git 不應該修改行尾字元。但是,有時,程式碼編輯器或 IDE 可能會意外添加回車符。在這種情況下,Git 應該足夠智慧地識別作業系統並在將其新增到儲存庫之前刪除回車符。可以透過在配置檔案中設定以下行來設定 Mac 或 Linux 系統上的此行為:

$ git config --global core.autocrlf input

這意味著,Git 應該只在程式碼儲存在儲存庫中時修改程式碼。

現在讓我們建立一個檔案,將其新增到暫存區並觀察輸出。

$ echo hello > abc.txt
$ git add abc.txt

輸出將是 -

Warning − LF will be replaced by CRLF in abc.txt.
The file will have its original line endings in your working directory

現在讓我們嘗試觀察如果在停用 core.autocrlf 設定後新增檔案,Git 的行為。可以使用以下命令停用此設定。

$ git config --global core.autocrlf false

現在讓我們建立一個檔案,將其新增到暫存區並觀察輸出

$ echo hello > abc.txt
$ git add abc.txt

現在 Git 沒有顯示任何警告訊息,因為 **autocrlf** 設定為 **false**。如果專案由使用不同平臺的協作者開發,則不應使用此設定。

dell@DESKTOP−N961NRS VINGW64 /e/tut_repo (master)
$ echo hello > def. txt
dell@DESKTOP−N961NR5 MINGW64 /e/tut_repo (master)
$ git add def.txt

更新於: 2021 年 2 月 20 日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告