簡體   English   中英

使用`.gitattributes`文件修復Git存儲庫中的行結尾

[英]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.

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