日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git中CRLF与LF的转换

發布時間:2024/1/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git中CRLF与LF的转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.換行符在不同的操作系統上的表示

首先要理解的一點是,對于不同的操作系統,對于換行符的表示是不一樣的。也就是說當我們在編輯一個文件,在鍵盤上按下回車鍵的時候,對于不同的操作系統保存到文件中的換行符是不一樣的。見下表:

CR:表示回車\r LF:表示換行\n CRLF:表示回車換行\r\n敲下回車鍵,不同的操作系統保存到文件中的值: Windows:使用的是CRLF ==> 即\r\n,文件中保存的是\r\n Linux/Unix: 使用的是LF ==> 即\n,文件中保存的是\n Mac OS: 使用的是CR ==> 即\r,文件中保存的是\r Mac OS X系統:使用的是LF ==> 即\n,文件中保存的是\n(Mac OS X已經改成和Unix/Linx一樣使用LF

問題: 既然不同的操作系統,對于換行符使用不同的表示形式,如果一個團隊在開發一個共同的項目,如果你使用的是windows系統,而你的小伙伴用的是Mac的話,當你們使用git協同開發軟件時,就會出現換行符不統一的問題。

雖然對于不同的操作系統,默認的換行符的表示方法不一樣,但是編輯器是可以設置在敲下回車鍵的時候保存的換行符是什么的,比如常用的vscode就可以進行設置。直接點擊編輯器右下角的LF或者CRLF,出現如下圖所示的設置,直接選擇即可。在設置完成之后,在敲回車鍵,保存在文件中的換行符就是你設置的(CRLF或者是LF,設置什么就是什么)。

2.Git會自動對換行符進行轉換

Git為了解決上面提出的問題,會自動對換行符進行轉換。轉換的方案有3種:

  • 在提交時將CRLF轉換為LF,在拉取(檢出checkout)時將UNIX換行符(LF)替換成CRLF。(Windows系統推薦使用,我們在windows上安裝git的時候,如果一路next,默認是使用這個方案)
  • 在提交時將CRLF轉換為LF,在拉取(檢出checkout)時不進行轉換。(Linux/Unix和Mac OS和Mac OS X推薦使用,在Unix或者類Unix操作系統上安裝git,默認使用這種方案)
  • 不進行轉換(這種方案對于跨平臺項目不推薦使用)。
  • 可以發現,如果不使用第3種方案,那么在Git倉庫(包括本地倉庫和GitHub遠程倉庫)中保存的文件的換行符都是LF表示的。

    3.自己指定換行符轉換方案

    我們自己在開發過程中,是可以修改/設置Git的換行符轉換方案的。修改/設置的方法有2種。

    3.1 通過Git的全局配置進行修改

    設置autoclf屬性,在控制臺直接運行如下的一條命令就可以設置了:

    // 提交時轉換為LF,檢出時轉換為CRLF git config --global core.autocrlf true // 提交時轉換為LF,檢出時不轉換 git config --global core.autocrlf input // 提交檢出均不轉換 git config --global core.autocrlf false

    上述命令運行之后,會修改.gitconfig文件。

    一般在項目中,為了避免項目中同時出現CRLF和LF,還可以開啟safecrlf檢查。當然,如果你的項目自己定義了語法檢查規則,例如使用eslint去約束換行符必須是LF,那么當你的文件中出現CRLF的時候,eslint會給你錯誤提示信息,告訴你不能包含CRLF,這時候,不開啟safecrlf也是可以的 (一般建議開啟)

    開啟方法如下第一條命令:

    // 拒絕提交包含混合換行符的文件 (一般設置為true) git config --global core.safecrlf true // 允許提交包含混合換行符的文件 git config --global core.safecrlf false // 提交包含混合換行符的文件時給出警告 git config --global core.safecrlf warn

    上述命令運行之后,也會修改.gitconfig文件。

    3.2 通過.gitattributes進行修改

    參考:https://git-scm.com/docs/gitattributes
    注意.gitattributes是針對一個單一的倉庫的,也就是說每一個代碼倉庫都可以包含一個.gitattributes文件。
    core.autocrlf 的配置依賴于每一位參與項目的開發機器上的配置,這很難確保每個人都能正確配置。于是在規范項目中的換行符方面,還有一套添加配置文件的方案。在項目的根目錄下可以添加一個.gitattributes 文件。它的優先級高于core.autocrlf的設置,可以覆蓋core.autocrlf的。它類似于 .gitignore 文件,隨提交修改生效,一個項目中可以維持一份相同的配置。所以,它能夠避免每個開發人員配置不同的問題。

    對于通過.gitattributes設置換行符的轉換方案,可以使用如下的命令:

    1. text=auto:采用git認為最好的方式來處理文件,未在.gitattributes中設置的項默認按照這種方式處理;(If Git decides that the contentis text, its line endings are converted to LF on checkin.When the file has been committed with CRLF, no conversion is done.)git發現是文本文件,那么在checkin的時候,會將文件結尾符轉換為LF。果文件已經被已CRLF的形式提交(就是說已經在Gti倉庫中的文件,如果結束符是CRLF,不會有任何的轉換),不會有任何轉換。2. -text 表示讓git在checkin以及checkout的時候,對end-of-line不做任何轉換。3. text 表示在checkin的時候會被轉換為LF(在repository中的文件結束符是LF),如果需要控制在checkout的時候的換行符,需要結合eol進行設置(也就是 控制working tree中的文件的結尾符,需要通過eol設置)。 text=auto和text的區別在于,text=auto由git來確定是不是文本文件,從而進行轉換;而text表示,你確定這個path就是文本文件,會直接對這個path進行轉換,而不是有git來decides是否轉換。4. 如果沒有指定text,git會使用全局配置中的core.autocrlf來進行eol的轉換。core.autocrlf需要自己在自己的電腦上進行配置。5. eol=crlf:此設置強制Git在checkin時對此文件的行尾標準化為LF,并在checkout文件時將其轉換為CRLF。6. eol=lf:此設置強制Git在checkin時將行尾標準化為LF,并在checkout文件時阻止轉換為CRLF(如果是LF,阻止其轉換為CRLF;如果已經是CRLF,是不會進行轉換的)7. binary: 告訴git該文件為二進制,防止git修改該文件。git不會對對其中的換行符進行改變。等加于-text -diff,和字符編碼work-tree-encoding沒關系(binary不會影響文件編碼) https://stackoverflow.com/questions/33085428/gitattributes-and-the-binary-option注意:.gitattributes文件必須要提交之后才能生效。

    eol=lf與eol=crlf的區別:
    標準化: 指在提交代碼到git數據庫(本地庫) 中將文本文件中的換行符CRLF轉為LF的過程
    轉換: 指在檢出Git數據庫代碼過程中將文本文件中的換行符LF轉換為CRLF的過程
    eol=lf: 標準化 + 不轉換
    eol=crlf 標準化 + 轉換

    參考博客:

  • https://segmentfault.com/a/1190000013973362?utm_medium=referral&utm_source=tuicool
  • https://www.jianshu.com/p/f13ef9e538e0
  • https://git-scm.com/docs/gitattributes
  • 總結

    以上是生活随笔為你收集整理的Git中CRLF与LF的转换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。