Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows上的Git:crlf设置意味着什么?_Windows_Linux_Git_Newline_Core.autocrlf - Fatal编程技术网

Windows上的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

我不理解git中CrLf设置的复杂性:
core.autocrlf
core.safecrlf

我正在一个团队中开发一个跨平台的项目,希望Windows和Linux开发人员能够一起工作,而不必因为行尾样式而将文件标记为已修改

各种设置意味着什么?选择任何一个选项会有什么后果?对我来说,什么是最好的解决方案


是的,我知道,那里的答案没有深刻的见解,因此没有帮助。

autocrlf的三个值:

  • true
    -当内容进入存储库(提交)时,其行尾将转换为LF,当内容从存储库中出来(签出)时,行尾将转换为CRLF。这通常适用于不懂windows的用户/编辑。假设编辑器(或用户)将创建带有CRLF结尾的文件,如果它看到正常的LF结尾,则会发疯,但您希望在回购中使用LF结尾,这将有望涵盖您。不过,事情可能会出差错。链接问题中有虚假合并冲突和修改文件报告的示例

  • input
    -当内容进入存储库时,其行尾将转换为LF,但内容在退出时保持不变。这基本上与
    true
    处于同一领域,假设编辑器实际上能够正确处理LF结尾;您只是在防止意外创建带有CRLF结尾的文件

  • false
    -git根本不处理行尾。这取决于你。这是很多人推荐的。使用此设置时,如果文件的行尾将被弄乱,则必须注意,因此合并冲突的可能性要小得多(假设知情用户)。教育开发人员如何使用他们的编辑器/IDE可以很好地解决这个问题。我见过的所有为程序员设计的编辑器,如果配置正确,都能够处理这个问题

请注意,
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