最近不一樣的開發同事因爲在代碼文件中採用的 換行符 不一樣,而致使了在git merge代碼階段diff操做時增長了額外的人工判斷成本,php
以下圖git
回顧一下 換行符 的幾種標準,來源歷史就不說了,能夠百度一下。spa
打開任何一個IDE都能看到相似的Code Style設置,Mac(\r) 這種機已經不生產了。unix
BUT 還有一種 「換行符」,留在文末補充中說。code
先上一張 ASCII 表,後面分析問題要用到:man asciiblog
回來講一下咱們遇到的問題,初看起來像 圖一,就是多了個^M,ci
但仔細看一下二進制格式(經過xxd能夠看到二進制下的狀況),就看出是能夠分紅兩種狀況的開發
狀況一:就是不一樣換行符的問題it
L3有^M,但L4沒有^Mclass
這種狀況下 相似dos2unix 或者tr 命令就能夠處理了
狀況二:不止是不一樣換行符,還多了一個\r (0x0D)
這種狀況下 惟有用sed處理了。
最後,咱們統一爲Unix換行符(\n),寫個腳本把全部的\r(0x0D)都刪除了(無論是狀況一仍是狀況二),再推回git。
find . -type f -name "*.php" ! -path "./.*" -exec sed -i 's/\x0D//g' {} \;
修正原有的代碼文件問題後,統一 一下 git 的配置:
#提交時轉換爲LF,檢出時轉換爲CRLF git config --global core.autocrlf true #拒絕提交包含混合換行符的文件 git config --global core.safecrlf true
================= 補充 =================
不知道你們有沒有看到 ASCII 表上第一個 NUL 字符,常見的用法是 find -print0 ... | xargs -0 .... 、perl -0 ....
僞換行符一個。