換行符的話題 -- clwu

 最近不一樣的開發同事因爲在代碼文件中採用的 換行符 不一樣,而致使了在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 ....

僞換行符一個。

相關文章
相關標籤/搜索