[英]Fixing the line-endings in a Git repository using the `.gitattributes` file
我有一個包含單個.md
文件的存儲庫,其中包含我正在編寫的一篇文章。
我從幾台不同的計算機編輯文件,一台運行Linux,另一台運行Windows。
現在看看Windows中的git diff
我已經做了一些更改,我可以看到我的文章顯示為文本分隔很好的文本......所有要刪除的文本都被刪除並替換為一條長行,其中段落由^M
分隔秒。
我知道^M
指的是Windows的CLRF行結尾。
diff
結果意味着我在Linux中啟動了文件(完全可能;我不記得了)並且已經將其保存在Windows中並且所有行結尾都已被替換。
我希望能夠在兩個操作系統中打開文件,其中的行顯示為應有的行,並且具有顯示換行符(而不是^M
占位符)的diff
結果,並且僅更改實際內容。
我已經做了一些背景閱讀 ,閱讀了行結尾和Git設置的一個很好的概述 ,甚至嘗試按照另一個Stack Overflow問題中的命令。
目前我在存儲庫的頂層有一個.gitattributes
文件,我已經將其提交給了存儲庫本身。 它只包含兩行:
# These files are text and should be normalised (convert Windows' CLRF to LF)
*.md text
我試過這個( 來源 ):
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"
這個( 來源 ):
git rm --cached -r .
git config core.autocrlf input
git diff --cached --name-only -z | xargs -0 git add
git commit -m "Fixed crlf issue"
在第二種情況下,最后一個命令告訴我沒有什么可以提交。 (我也不喜歡改變core.autoclrf
的想法,因為我試圖純粹通過.gitattributes
來做這.gitattributes
,但我感到很沮喪。)
很高興回答問題並提供更多細節。 我可能會出錯的任何想法? 我錯過了一步嗎?
嘗試使用
*.md text eol=native
代替
*.md text
在你的.gitattributes中。
我確實在其中設置了一個帶有CR-LF文件的小型測試倉庫,並按照您的第一個程序執行規范化:
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"
這是在辦理登機手續時正確規范化的文件。 但是,奇怪的是,即使我在OSX上,它在退房時仍然保持CR-LF。
據推測,core.eol的默認值是原生的。 所以,我希望git只使用LF來檢查我的文件。 但似乎出於某種原因,它只是沒有這樣做。 所以,我對.gitattributes的理解是有缺陷的,或者我們有一個bug被提交給git ......
無論如何,正如我所說的那樣,在.gitattributes中明確設置eol = native對我來說是個竅門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.