Windows上的Git:crlf设置意味着什么?
我不理解git中CrLf设置的复杂性:Windows上的Git:crlf设置意味着什么?,windows,linux,git,newline,core.autocrlf,Windows,Linux,Git,Newline,Core.autocrlf,我不理解git中CrLf设置的复杂性:core.autocrlf,core.safecrlf 我正在一个团队中开发一个跨平台的项目,希望Windows和Linux开发人员能够一起工作,而不必因为行尾样式而将文件标记为已修改 各种设置意味着什么?选择任何一个选项会有什么后果?对我来说,什么是最好的解决方案 是的,我知道,那里的答案没有深刻的见解,因此没有帮助。autocrlf的三个值: true-当内容进入存储库(提交)时,其行尾将转换为LF,当内容从存储库中出来(签出)时,行尾将转换为CRLF
core.autocrlf
,core.safecrlf
我正在一个团队中开发一个跨平台的项目,希望Windows和Linux开发人员能够一起工作,而不必因为行尾样式而将文件标记为已修改
各种设置意味着什么?选择任何一个选项会有什么后果?对我来说,什么是最好的解决方案
是的,我知道,那里的答案没有深刻的见解,因此没有帮助。autocrlf的三个值:
-当内容进入存储库(提交)时,其行尾将转换为LF,当内容从存储库中出来(签出)时,行尾将转换为CRLF。这通常适用于不懂windows的用户/编辑。假设编辑器(或用户)将创建带有CRLF结尾的文件,如果它看到正常的LF结尾,则会发疯,但您希望在回购中使用LF结尾,这将有望涵盖您。不过,事情可能会出差错。链接问题中有虚假合并冲突和修改文件报告的示例true
-当内容进入存储库时,其行尾将转换为LF,但内容在退出时保持不变。这基本上与input
处于同一领域,假设编辑器实际上能够正确处理LF结尾;您只是在防止意外创建带有CRLF结尾的文件true
-git根本不处理行尾。这取决于你。这是很多人推荐的。使用此设置时,如果文件的行尾将被弄乱,则必须注意,因此合并冲突的可能性要小得多(假设知情用户)。教育开发人员如何使用他们的编辑器/IDE可以很好地解决这个问题。我见过的所有为程序员设计的编辑器,如果配置正确,都能够处理这个问题false
autocrlf
不会影响存储库中已有的内容。如果你以前犯过以CRLF结尾的事情,他们会一直这样。这是避免依赖autocrlf的一个很好的理由;如果一个用户没有设置它,他们可以将带有CRLF结尾的内容输入到repo中,它会一直存在。强制正常化的一个更有力的方法是使用;假设git决定内容是文本(而不是二进制),那么将给定路径的设置为auto
将标记为行尾规范化
一个相关的选项是safecrlf
,它基本上只是一种确保不会在二进制文件上不可逆地执行CRLF转换的方法
我在处理Windows问题和git方面没有太多的经验,因此关于影响/陷阱的反馈肯定是受欢迎的。我探讨了提交和签出案例的3个可能值,结果如下表所示:
╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║ false ║ input ║ true ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git commit ║ LF => LF ║ LF => LF ║ LF => LF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => LF ║ CRLF => LF ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git checkout ║ LF => LF ║ LF => LF ║ LF => CRLF ║
║ ║ CR => CR ║ CR => CR ║ CR => CR ║
║ ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝
我建议在所有平台上使用
core.autocrlf=input
。在这种情况下,如果Git面向CRLF
,它将隐式地将其转换为LF
,并且LF
的现有文件保持原样。FYI.,默认情况下,以Windows结尾的行将采用CRLF,Linux将采用LF。
请查看下表以明确理解
╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf║ 假的║ 输入║ 真的║
║ ║ Win=>Unix║ Win=>Unix║ Win=>Unix║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git提交║ LF=>LF║ LF=>LF║ LF=>LF║
║ ║ CR=>CR║ CR=>CR║ CR=>CR║
║ ║ CRLF=>CRLF║ *CRLF=>LF║ *CRLF=>LF║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║ git签出║ LF=>LF║ LF=>LF║ *LF=>CRLF║
║ ║ CR=>CR║ CR=>CR║ CR=>CR║
║ ║ CRLF=>CRLF║ CRLF=>CRLF║ CRLF=>CRLF║
╚═══════════════╩══════════════╩══════════════╩══════════════╝代码>其他相关问题:和autocrlf副作用示例:只是为了让您感觉更舒服:没有人完全这样做:)感谢您提供清晰详细的答案!几个问题:1)文本属性是回购协议的一部分吗?如果一个新的程序员要克隆它,他会收到attr吗?2) 了解新线风格的动机是什么?3) 假设没有,根据您的解释,我应该a)设置autocrlf=true b)在repo的根路径上设置text attr=auto,c)设置safecrlf=??4) 如果我设置autocrlf=input,并使用配置不好的IDE“触摸”该文件(可能将LFs更改为CRLFs),git会将该文件视为modifid吗?@Jonathan:(1)查看链接的gitattributes手册页。属性在.gittributes文件中配置,该文件可以像跟踪任何其他文件一样进行跟踪。(2) 配置IDE以生成正确类型的输出是一次性的,而且是完全必要的——那么一致的缩进、间距和格式呢?意识到这一点并不意味着意外。(3a,b)设置文本属性t