我试图让git不改变任何操作的任何行结尾。不幸的是,似乎这样做并不重要。我已将其缩减为以下测试用例,该测试用例具有尽可能多的不同机制来禁用此行为。
git config --global core.autocrlf false
git config --global core.eol crlf
(以防万一)git init --shared
(然后取消隐藏已创建的.git
目录).gitignore
.gitattributes
* -text
git add .
,然后git commit -m "initial commit"
来解决,例如this。git branch master_recv
document.txt
git add -A
,然后git commit -m "<something>"
document.txt
仍然包含CRLF(删除它并使用--hard
重置会返回仍然使用CRLF的版本)new file
git add -A
,然后git commit -m "<something>"
document.txt
和B的new file
都包含CRLF git pull <remote> master:master_recv
document.txt
已更改为LF。添加的文件new file
也包含LF。如果B是Windows计算机,则不会出现此问题。
答案 0 :(得分:53)
在项目中,应该有一个.gitattributes
文件。大多数情况下,它应该如下所示(或screen-shot}:
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto
# Never modify line endings of our bash scripts
*.sh -crlf
#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.css text
*.html text
*.java text
*.js text
*.json text
*.properties text
*.txt text
*.xml text
# These files are binary and should be left untouched
# (binary is macro for -text -diff)
*.class binary
*.jar binary
*.gif binary
*.jpg binary
*.png binary
将* text=auto
更改为* text=false
以禁用自动处理(请参阅screen-shot)。
像这样:
如果您的项目没有.gitattributes文件,则行结尾由您的git配置设置。要更改您的git配置,请执行以下操作:
转到此目录中的配置文件:
1)C:\ ProgramData \ Git \ config
2)在Notepad ++(或您喜欢的任何文本编辑器)中打开配置文件
3)将“autocrlf =”更改为false。
答案 1 :(得分:25)
一个简单的解决方案是:
git config --global core.autocrlf false
如果自动完成转化,则表示回购中有.gitattributes
core.eol
directive。
答案 2 :(得分:6)
我明白了。似乎SCP计划正在转换行结尾。当我尝试用LF结尾故意制作一个文件然后观察它在下载时显示为CRLF时,我注意到了这一点。
由于这是我的解决方案,我接受了这个答案,但未来的人也应该参考其他答案以获得更通用的解决方案。
答案 3 :(得分:2)
这是您为单个存储库执行此操作的方式。
在存储库的根目录中创建文件.gitattributes
,并在其中添加此行
* -text
就是这样。这是一个匹配所有文件的通配符,告诉git取消设置text属性。这意味着git将所有文件都视为二进制文件,因此不执行任何行尾转换。
答案 4 :(得分:1)
来自gitattributes(5) Manual Page“效果”主题
text
此属性启用和控制行尾标准化。当一个 文本文件被规范化,其行结尾被转换为LF 库。控制工作中使用的行结束样式 目录,使用单个文件的
eol
属性和core.eol
所有文本文件的配置变量。
Set
在路径上设置text属性可启用行尾规范化 并将路径标记为文本文件。进行行尾转换 没有猜测内容类型。
Unset
在路径上取消设置text属性会告诉Git不要 在签入或结账时尝试任何行尾转换。
core.autocrlf
在新的(1.7.2 +)Git中未使用,core.eol
并正确设置|取消设置文本属性被视为更可靠的方式