这就是我正在做的事情:
$ git init /tmp/repo
$ echo -e "1\r\n2" > x.txt
$ hexdump x.txt
0000000 31 0d 0a 32
$ git config --local core.autocrlf false
$ git add x.txt
$ git commit -m 'test' x.txt
[master (root-commit) fe8c018] x.txt
1 file changed, 2 insertions(+)
create mode 100644 x.txt
据我了解,目前repo中的文件为1\r\n2
。现在,如果我签出此代码,该文件的内容应为1\n2
,对吧?但事实并非如此:
$ git config --global core.autocrlf true
$ git clone file:///tmp/repo r
$ cd r
$ hexdump x.txt
0000000 31 0d 0a 32
为什么它仍然是\r\n
?它是supposed to be \n
,对吧?
$ git --version
git version 2.14.1
答案 0 :(得分:1)
我认为git不会将此文件识别为文本文件并将其视为二进制文件。 autocrlf 不会影响二进制文件。
要将特定文件或扩展名标记为文本,您可以添加 .gitattributes 文件,指定要将其视为文本的女巫文件,例如:
*.x text
告诉git处理所有带扩展程序的文件' x'作为文本并应用 autocrlf
的此文档答案 1 :(得分:1)
我们所做的是在我们的仓库的根目录中添加.gitattributes
文件,其中包含以下内容:
* text eol=lf
*.ttf binary
*.woff binary
*.woff2 binary
第一行是"赶上所有"将所有行结尾设置为Unix样式 - 您可以省略eol
位或将其设置为crlf
。那应该抓住你的.txt文件。
并非.gitattributes
优先于其计算机上的单个开发人员的git配置,这就是为什么建议他们拥有一个 - 特别是如果你的工作交叉 - 平台。
遗憾的是,这从未奏效,从未弄清楚原因:* -text
答案 2 :(得分:0)
由于git-config手册页core.autocrlf
选项用于转换' LF'到了CRLF'。
$ git init /tmp/repo
Initialized empty Git repository in /private/tmp/repo/.git/
$ cd /tmp/repo
$ echo -ne "1\n2" > x.txt
$ hexdump x.txt
0000000 31 0a 32
0000003
$ git config --local core.autocrlf false
$ git add x.txt
$ git commit -m 'test' x.txt
[master (root-commit) 7ed185b] test
1 file changed, 2 insertions(+)
create mode 100644 x.txt
$ cd ..
$ git config --global core.autocrlf true
$ git clone file:///tmp/repo r
Cloning into 'r'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd r
$ hexdump x.txt
0000000 31 0d 0a 32
0000004