什么是 .gitattributes ?
當執(zhí)行 git 動作時扩借,.gitattributes 文件允許你指定由 git 使用的文件和路徑的屬性,例如:git commit
等。
換句話說,每當有文件保存或者創(chuàng)建時狐肢,git 會根據(jù)指定的屬性來自動地保存舱呻。
其中的一個屬性是eol(end of line)梁剔,用于配置文件的結(jié)尾脯颜。本文將會深入了解如何配置文件的結(jié)尾行哟旗,這樣的話,即使在不同的機器、操作系統(tǒng) 上都可以使得每個開發(fā)者都可以使用相同的值热幔。
為什么是 .gitattributes(開發(fā)者之間的爭議 ?? )?
不是所有的開發(fā)者都是一樣的,不能因為你是在 Windows 上使用 Visual Studio Code 開發(fā)的讼庇,就期望別的 Pull Request 也是基于相同的開發(fā) 環(huán)境完成的(在 MacOS 上可能用的是 Sublime Text2)绎巨。
正如上面提到的,開發(fā)者使用不同的操作系統(tǒng)蠕啄,默認的文件結(jié)尾行就會不同场勤。在 Windows 上默認的是回車換行(Carriage Return Line Feed, CRLF),然而歼跟,在 Linux/MacOS 上則是換行(Line Feed, LF)和媳。
從表面看起來,內(nèi)容都是一樣的哈街,那我們?yōu)槭裁催€會困擾呢留瞳???
好的,如果你啟用了該功能骚秦,并設(shè)置屬性endOfLine
為lf
的話她倘。
{
"endOfLine": "lf"
}
在 Windows 上,開發(fā)者會看到如下的檢查警告作箍。
這時候.gitattributes
就可以派上用場了 ??硬梁!
新倉庫
首先,在倉庫的根目錄下創(chuàng)建名為.gitattributes
的文件胞得。
下面荧止,是一份.gitattributes
文件的樣例內(nèi)容。
*.js eol=lf
*.jsx eol=lf
*.json eol=lf
把該文件提交并推送到服務(wù)器上阶剑。
git add .
git commit -m "Added .gitattributes to repo"
git push
現(xiàn)在跃巡,任何人從倉庫獲取代碼后,創(chuàng)建以及修改文件時个扰,git 都會自動地設(shè)置好正確的文件結(jié)尾瓷炮。
增加到已有的 Git 倉庫
正如上面提到的,在倉庫的根目錄下創(chuàng)建名為.gitattributes
的文件递宅。一旦文件推送到 git 服務(wù)器后娘香,請確保你的本地 倉庫是干凈的、無需提交的办龄。使用命令git status
可以檢查是否你的倉庫是干凈的烘绽。
注意:如果你還有未提及或推送的文件,請確保這些動作已經(jīng)被執(zhí)行過了俐填,或者在執(zhí)行下面的命令前stash
過安接。
重置 GitAttributes
git rm --cached -r
git reset --hard
上面的命令就會根據(jù)文件.gitattributes
中的定義,更新文件的結(jié)尾行英融。
任何變更都會自動使用指定文件的文件結(jié)尾行格式盏檐。
下一步歇式,可以通知團隊成員或者協(xié)作者去執(zhí)行 Git 屬性重置的命令。
現(xiàn)在胡野,prettier 就不會在提示有關(guān) CR 的問題了材失,所有的開發(fā)者都可以安心寫代碼了! ??