簡體   English   中英

Git使所有簽出文件的行尾CRLF

[英]Git makes all checked out files' end of line CRLF

我在mac上編程,我真的不明白Git對我文件行的結尾做了什么:

我創建了一個包含Unix格式文件的存儲庫(LF行尾)

當我克隆我創建的存儲庫時 ,我的所有行都是CRLF 它不應該自動檢測到我需要LF線端?

我將autoclrf設置為true。

GIT關於autoclrf的文檔很難理解:

如果您只想在工作目錄中使用CRLF行結尾而不管您正在使用的存儲庫,則可以設置配置變量“core.autocrlf”而不更改任何屬性。

[核心]

  autocrlf = true 

這不會強制所有文本文件的規范化,但確保引入存儲庫的文本文件在添加時將其行結尾標准化為LF,並且已在存儲庫中標准化的文件保持規范化。

第一句話說“如果你想擁有所有的crlf”,當第二句話說git會自動調整行尾。

就我而言,似乎Git將所有內容轉換為CRLF,並在我嘗試克隆時將其保留。

gitattributes手冊頁的布局很差。 在后面的部分中,您將找到:

core.eol配置變量控制git將用於工作目錄中規范化文件的行結尾; 默認設置是使用您平台的本機行結束, 如果設置了core.autocrlf則使用CRLF。

因此,除非您指定了core.eol ,否則無論您使用的是Apple Mac OS X,Microsoft Windows還是Ubuntu Linux,都會得到以CR + LF字符終止的行。

從你的問題:

第一句話說“如果你想擁有所有的crlf”,當第二句話說git會自動調整行尾。

重要的是要注意,當core.autocrlf設置為true時,有兩個調整方向:

  • CR + LF將成為存儲庫/存儲庫中的 LF。 也就是說,提交文件和存儲庫后端將在文本文件的行末尾有LF。 這樣可以在提交歷史記錄中保持一致,如果您的同事的IDE決定將您的LF神奇地轉換為CR + LF(誰想要在他們的差異中看到它?),那么差異/比較會更容易。 我猜你也會節省幾個字節的硬盤空間。
  • LF將成為工作目錄中的 CR + LF。 在簽出的文件系統中,任何新文本文件都會有一行以CR + LF結尾,一旦git觸及它。 即使文件在第一次創建時以明細LF結尾的行也會發生這種情況。

您要做的第一件事是取消設置core.autocrlf或將其設置為false 如果您希望簽出文本文件以符合用戶的OS首選行結尾,無論它們是如何創建的,只需將其添加到.gitattributes:

* text=auto

或者,如果git不擅長猜測你的哪個文件是文本,你可以聲明一個特定的擴展來進行這種雙向規范化:

*.ext text

(其中ext是有問題的文件擴展名)

當你將core.autocrlf設置為true ,Git在提交到repo時將行結尾轉換為LF ,但是使用適合你的平台設置的行結尾將文件寫入工作樹(Mac / Unix / Linux上的LF ,Windows上的CRLF )。

是的,當autocrlf設置為true時,您應該在Windows上的工作樹中看到CRLF,其中包括瀏覽資源管理器時的情況。 如果您推送到Linux repo,您​​應該看到所有文件都使用LF正確結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM