2018年2月24日 星期六

[Windows Batch File] CRLF Problem in Batch file with Git

CRLF Problem in Batch file with Git

最近遇到一個問題

我有一個 Project 裡面含有數個 .bat 檔案。

 平常執行起來並沒有什麼問題,但是一旦經過 Git Commit 過後;就執行不起來了! 

這個是什麼狀況呢? 

原來是在於 git 原本是用來維護 Linux 原始碼的,因此內部使用的斷行符號為 LF。

 當你在 commit 的時候,它會自動將你的文字檔案之中的斷行符號轉為 LF。

也就是說即使你在 Windows 裡面編輯 (Windows 的 Break 為 CRLF 有兩個字元)。

 它也會將 CRLF 轉換成為 LF!但是 Windows CMD 是仰賴 CRLF 去判斷 statement。 

轉換過就會造成執行錯誤。 

解決方法是在專案裡加上一個 .gitattribute 檔,它可以讓 git 知道你要如何處裡這個 Project。 

並且在裡面加上這行

*.bat text=false 

這樣的話當 git 遇到 *.bat 需要 commit 的時候,不會自動地轉換我們的 CRLF。

Chia Xin