我尝试使用CRLF结束行提交文件,但失败了.
我花了整整一天的时间在我的Windows计算机上尝试不同的策略,几乎被迫停止尝试使用Git而是尝试使用Mercurial.
每个答案只能分享一个最佳实践.
大多数时候,当我尝试检出另一个现有分支时,如果我在当前分支上有一些未提交的更改,Git不允许我.所以我必须首先提交或存储这些更改.
但是,偶尔Git允许我签出另一个分支而不提交或存储这些更改,它会将这些更改带到我签出的分支.
这里的规则是什么?更改是分阶段还是未分阶段是否重要?将更改传递给另一个分支对我没有任何意义,为什么git有时会允许它?也就是说,它在某些情况下有用吗?
我在Stack Overflow上阅读了很多不同的问题和答案,以及关于core.autocrlf设置如何工作的git文档.
这是我对以下内容的理解:
Unix和Mac OSX(OSX之前使用CR)客户端使用LF行结尾.
Windows客户端使用CRLF行结尾.
当在客户端上将core.autocrlf设置为true时,git存储库始终以LF行结束格式存储文件,并且客户端(即Windows)在签出/提交时来回转换客户端文件中的行结尾-LF行结尾,无论行结尾文件在客户端上的格式是什么(这与Tim Clem的定义不一致 - 请参阅下面的更新).
这是一个矩阵,试图为带有问号的core.autocrlf的'input'和'false'设置记录相同的内容,我不确定行结束转换行为.
我的问题是:
我将从答案中更新问号,因为似乎已形成共识.
core.autocrlf value
true input false
----------------------------------------------------------
commit | convert ? ?
new | to LF (convert to LF?) (no conversion?)
commit | convert to ? no
existing | LF (convert to LF?) conversion
checkout | convert to ? no
existing | CRLF (no conversion?) conversion
我并不是真的在寻找各种设置的利弊意见.我只是在寻找数据,这清楚地说明了如何期望git能够在三种设置中运行.
-
2012年4月17日更新:阅读了由JJD在评论中链接的Tim Clem的文章后,我修改了上表中"未知"值中的一些值,并更改了"checkout existing | true to conversion"到CRLF而不是转换为客户".以下是他给出的定义,这些定义比我在其他地方看到的更清楚:
core.autocrlf …
我克隆了一个存在不一致行结尾的存储库.我添加了一个.gitattributes为我想要规范化的文件设置text属性.现在,当我提交更改时,我收到消息:
warning: CRLF will be replaced by LF in FILE.
The file will have its original line endings in your working directory.
Run Code Online (Sandbox Code Playgroud)
如何让git为我标准化我的文件的工作副本?我希望git能够规范化整个工作树.
最近,一组研究人员使用相同的SHA-1哈希生成了两个文件(https://shattered.it/).
由于Git将此哈希用于其内部存储,这种攻击在多大程度上会影响Git?
我有一个现有的存储库,其中行结尾都搞砸了.我想重写整个存储库并一劳永逸地修复行结尾.有文本文件和二进制文件,我们假设git检测二进制文件的启发式方法可以正常工作.
使用带有规范化行结尾的文件重新填充整个存储库的最简单方法是什么?