可能重复:
git用CRLF替换LF
当我创建一个新的rails应用程序时,我在git中看到有关LF替换的警告.我做git init git add.
然后热潮!我看到几乎所有文件都弹出.我通常只是继续构建我的应用程序,它在文件的许多更改后消失了.
例:
该文件将在您的工作目录中具有其原始行结尾.警告:LF将被Gemfile中的CRLF替换.
该文件将在您的工作目录中具有其原始行结尾.警告:LF将被Gemfile.lock中的CRLF替换.
该文件将在您的工作目录中具有其原始行结尾.警告:LF将由README中的CRLF替换.
LF和CRLF有什么区别?
从长远来看,我是否应该关注这一点,或者只是忽略它并像往常一样继续前进?
我尝试使用CRLF结束行提交文件,但失败了.
我花了整整一天的时间在我的Windows计算机上尝试不同的策略,几乎被迫停止尝试使用Git而是尝试使用Mercurial.
每个答案只能分享一个最佳实践.
我正在使用Git-1.9.0-preview20140217
Windows.据我所知,这个版本应该解决文件名太长的问题.但不适合我.
当然,我做错了什么:我没有git config core.longpaths true
和git add .
再git commit
.一切顺利.但是当我现在做的时候git status
,我会得到一个文件列表Filename too long
,例如:
node_modules/grunt-contrib-imagemin/node_modules/pngquant-bin/node_modules/bin-wrapper/node_modules/download/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js: Filename too long
Run Code Online (Sandbox Code Playgroud)
复制对我来说非常简单:只需使用Angular生成器创建一个Yeoman Web应用程序("yo angular")并node_modules
从.gitignore
文件中删除.然后重复上述Git命令.
我在这里错过了什么?
在做的git diff
时候会说"文件末尾没有新行".
好的,文件末尾没有换行符.有什么大不了的?
这条消息有什么意义,它试图告诉我们什么?
我有一个从Windows和OS X访问的Git存储库,我知道已经包含一些带有CRLF行结尾的文件.据我所知,有两种方法可以解决这个问题:
设置core.autocrlf
到false
无处不在,
按照指示在这里(回荡在GitHub上的帮助页)到存储库转换为只包含LF行结束,然后设置core.autocrlf
要true
在Windows和input
在OS X上有这样做的问题是,如果我有仓库中任何二进制文件那:
他们会被腐化.我的存储库可能包含这些文件.
那么为什么我不应该关闭Git的行结束转换呢?网上有很多模糊的警告关于core.autocrlf
关闭造成问题,但很少有具体问题; 到目前为止我唯一发现的是kdiff3无法处理CRLF结尾(对我来说不是问题),而且一些文本编辑器有行结束问题(对我来说也不是问题).
存储库是我公司的内部存储库,因此我不需要担心与具有不同autocrlf设置或行结束要求的人共享它.
是否有任何其他问题只是留下我不知道的行结尾?
我在github上托管了一个git存储库.许多文件最初是在Windows上开发的,我对行结尾并不太谨慎.当我执行初始提交时,我也没有任何git配置来强制执行正确的行结束.结果是我的github存储库中有许多带有CRLF行结尾的文件.
我现在部分在Linux上开发,我想清理行结尾.如何确保文件在github上使用LF正确存储,并在我的工作副本中使用LF?
我已经设置了一个.gitattributes
包含text eol=LF
; 那是对的吗?有了这个承诺和推动,我可以只是rm
我的本地仓库并从github重新克隆以获得所需的效果吗?
我已经看过所有类似的问题但是我已经仔细检查了一些奇怪的东西肯定会发生.
在一台服务器(Solaris with git 1.8.1)上,我克隆了git存储库,然后将.git文件夹复制到现有的实时文件中.这很完美,我可以跑
git status
Run Code Online (Sandbox Code Playgroud)
然后
git diff [filename]
Run Code Online (Sandbox Code Playgroud)
检查任何不同的文件.
在另一台服务器(Solaris with git 1.7.6)上,我做的完全一样
git diff [filename]
Run Code Online (Sandbox Code Playgroud)
即使文件的内容肯定不同,也不显示任何内容.我还测试了添加一个新文件,然后进行编辑.同样的问题,git status
将文件显示为已更改但未git diff
显示任何内容.如果我下载更改的文件并在本地运行diff,那么我得到diff输出.
使用Git,当使用该autocrlf = true
标志时,在更改行结尾时仍会发出警告.
我理解警告的内容,以及如何关闭行结束标志,但是如何关闭警告本身呢?
ENV:
我git commit
说,它说:
warning: LF will be replaced by CRLF.
Run Code Online (Sandbox Code Playgroud)
这个警告尾巴落后了吗?
我在Windows中编辑文件,行尾是CRLF
,就像这张图:
并且git将其更改LF
为承诺回购.
所以我认为正确的警告是:
warning: CRLF will be replaced by LF.
Run Code Online (Sandbox Code Playgroud) 我是git的新手,我已经阅读了许多关于行结尾以及git如何对待它们的内容.顺便说一句,我在Windows上.我已经制作了一个.gitattributes
文件并将例如*.txt设置为文本.当我提交.txt文件时,我收到警告:
警告:CRLF将在whatever.txt中被LF替换
但我知道.我不需要那个警告.替换文本文件中的行结尾是我想要的.
现在,设置safecrlf
为false会使警告消失,但safecrlf
阅读手册:
如果为true,则进行git检查,如果在行结束转换处于活动状态时转换CRLF是可逆的.Git将验证命令是直接还是间接修改工作树中的文件.例如,提交文件后检出同一文件应该会在工作树中生成原始文件.如果对于core.autocrlf的当前设置不是这种情况,git将拒绝该文件.
从那以后,safecrlf
似乎是一个好主意.但是,我不明白为什么设置safecrlf
为true会给我关于我的文本文件的警告; 在我看来,这些是不同的问题 - 文本文件的警告和检查是否可逆.实际上,git不会拒绝我的文件.
我可以摆脱文本文件的警告,仍然
safecrlf
设置?还是我误解了什么?
git ×10
eol ×2
line-endings ×2
diff ×1
git-config ×1
git-svn ×1
github ×1
newline ×1
windows ×1