我有一个标记为二进制文件的文件:
$ cat .gitattributes
dist/* binary
$ git check-attr -a ./dist/app.js
./dist/app.js: binary: set
./dist/app.js: diff: unset
./dist/app.js: merge: unset
./dist/app.js: text: auto
git diff
正确将文件视为二进制文件:
$ git diff
diff --git a/dist/app.js b/dist/app.js
index 9c05798..fbcedd4 100644
Binary files a/dist/app.js and b/dist/app.js differ
但是当我运行git status
时,我收到有关CRLF
次转化的警告:
$ git status
warning: CRLF will be replaced by LF in dist/app.js.
The file will have its original line endings in your working directory.
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: dist/app.js
发生了什么事?为什么git警告我这个文件中的CRLF?
答案 0 :(得分:1)
Git 2.10(2016年第3季度)应该更加小心二进制中的crlf。
commit 6523728见Torsten Bögershausen (tboegi
)(2016年6月28日)
(由Junio C Hamano -- gitster
--合并于commit 21bed62,2016年7月25日)
convert
:统一CRLF的“auto
”处理在此更改之前,
$ echo "* text=auto" >.gitattributes
$ echo "* eol=crlf" >>.gitattributes
与
具有相同的效果
$ echo "* text" >.gitattributes
$ git config core.eol crlf
由于“
eol
”属性的优先级高于“text=auto
”,因此可能损坏二进制文件,而不是大多数用户期望发生的。使'eol'属性服从'text = auto',现在
$ echo "* text=auto" >.gitattributes
$ echo "* eol=crlf" >>.gitattributes
的行为与
相同
$ echo "* text=auto" >.gitattributes
$ git config core.eol crlf
Git 2.13(2017年第2季度)确保规范化使用正确的命令
请commit 8599974查看Torsten Bögershausen (tboegi
)(2017年4月12日)
(Junio C Hamano -- gitster
--于2017年4月24日commit 848d9a9合并)
从干净的工作目录:
$ echo "* text=auto" >.gitattributes
$ rm .git/index # Remove the index to re-scan the working directory
$ git add .
$ git status # Show files that will be normalized
$ git commit -m "Introduce end-of-line normalization"