我在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用这样的行添加了文件
*.css text
*.js text
etc...
Run Code Online (Sandbox Code Playgroud)
然后我按照http://git-scm.com/docs/gitattributes#_checking-out_and_checking-in上的说明进行操作
$ rm .git/index # Remove the index to force Git to
$ git reset # re-scan the working directory
$ git status # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"
Run Code Online (Sandbox Code Playgroud)
但是现在我的工作副本仍然有回车!我有未跟踪的文件,我想保留.如何使用规范化文件再次git checkout master分支?
我知道文件在存储库中是规范化的,因为当我克隆repo时,我有所有没有回车符的文件.
我不了解有关的git的CRLF设置的复杂性:core.autocrlf,core.safecrlf
我正在团队中开发一个跨平台的项目,并希望Windows和Linux开发人员能够在没有git标记文件的情况下一起工作,因为行结束样式.
各种设置意味着什么?选择任何选项会产生什么后果?对我的案子来说,最好的解决方案是什么?
是的,我知道这个问题,那里的答案没有洞察力,因此没有帮助.
正如人们可以从 其他 帖子中收集的那样,Git的终端规范化有其优点和缺点.我有一个特定的Windows项目,我认为最好的办法是完全禁用行尾规范化.也就是说,我希望保留所有换行符(大部分都是CRLF完整的),而不是让git将它们规范化为 - LF仅在幕后,我希望该更改能够影响所有计算机上存储库的所有克隆.问题是最有效的方法.
大多数关于Git行尾规范化的讨论都是根据core.autocrlf,我可以通过设置来实现我的目标core.autocrlf=false.但是,这是一个git-config设置,我相信必须在每台机器上分别设置它.如果为true,那似乎容易出错,特别是因为msysgit安装程序会将其引导到设置中core.autocrlf=true.
我正在尝试从这里安装YouCompleteMe .
当我执行:
./install.sh --clang-completer
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
env: bash\r: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不知道环境变量有什么问题.这是我的bash路径:
which bash
/bin/bash
Run Code Online (Sandbox Code Playgroud)
我需要将其更改为/ usr/bash吗?如果是,那我该怎么做?我尝试更改〜/ .bashrc文件,但它没有用.
我正在使用Windows.暂存文件时,我收到此错误.
Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.
后跟一个已从LF转换为CRLF的文件列表
在用Git使用跨平台阅读CRLF/LF问题之后,我或多或少地了解了发生了什么,我正在尝试确定哪种autocrlf设置最适合我,但我不明白为什么Git说更新索引失败.我的理解是它已经转换了EOF,所以它的问题是什么,为什么它告诉我更新索引失败了.我是否需要修复某些内容(除了选择适当的autocrlf设置)或者我可以继续
然后,我有两个选项继续和解锁索引,这些是什么意思,什么是最好的行动方案.
我是git的新手,我需要一些帮助.我在windows上使用msysgit.
当我执行命令时,git add [folderName]我得到了响应:
fatal: LF would be replaced by CRLF in [.css file or .js file]
Run Code Online (Sandbox Code Playgroud)
然后,如果你尝试做一个提交没有任何反应.
$ git commit
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# so01/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)
其中一些css/js文件是从网上下载的,所以我猜这就是为什么有LF.如果我打开文件并剪切/粘贴内容,那么我会在下一个文件上收到错误,依此类推.
任何帮助都感激不尽.
编辑
设置core.autocrlf为false似乎可以解决问题,但我在很多帖子上都没有将此选项设置为false.
有人能指出我在哪里可以找出在这种情况下可能出现的问题?
我遇到了与此问题相同的问题:git status显示修改,git checkout - <file>不会删除它们
Git继续显示工作目录修改,即使git config --global core.autocrlf false:
E:\_dev\github\Core [master +0 ~93 -0]> git config --get-all core.autocrlf
false
false
Run Code Online (Sandbox Code Playgroud)
(注意我甚--system至将设置设置为false)
为什么看起来Git仍在修改我的行尾?
E:\_dev\github\Core [master +0 ~93 -0]> git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: tools/StatLight/StatLight.EULA.txt
... more changes ... …Run Code Online (Sandbox Code Playgroud) 我使用Git本身如何处理行尾很高兴,通过core.autocrlf,core.eol+ gitattributes(Tim的文章是优秀).
我有一个autocrlf设置为的Windows Git仓库true.因此,所有文本文件都存储在repo中,LF并作为工作目录存放在工作目录中CRLF.这个仓库是从一个SVN仓库中克隆出来的,我们仍然使用这个仓库从/拉到(SVN仓库是我们用于触发CI等的中央,受祝福的仓库).
但我不知道git-svn在推/拉操作期间如何处理行结尾.
任何人都可以解释git-svn在这个例子中做什么?
有没有办法确定现有git存储库中的行结尾?
如果我克隆现有存储库,如何确定创建者使用了哪个core.autocrlf?
我仍然不确定core.autocrlf的最佳设置,例如在Windows机器上(因为有多种意见: 使用代码分发git配置或https://help.github.com/articles/dealing-with-line-结局)
额外的问题:您是否可以在Windows上(使用标准工具)确定repo是否在所有提交中都有混合行结尾(错误的core.autocrlf设置)?
core.autocrlf ×10
git ×9
newline ×7
windows ×3
bash ×1
eol ×1
git-status ×1
git-svn ×1
line-endings ×1
linux ×1
msysgit ×1
revert ×1