linux - Git 用 CRLF 替换 LF

标签 linux windows git newline lf

我在 Windows XP 上运行 Git机器, 使用 Bash .我从 SVN 导出了我的项目,然后克隆一个裸存储库。
然后我将导出粘贴到裸存储库目录中,并做了一个:

git add -A
然后我得到一个消息列表,上面写着:

LF will be replaced by CRLF


这种转换的后果是什么?这是 .NET Visual Studio 中的解决方案。

最佳答案

这些消息是由于 core.autocrlf 的默认值不正确造成的。在 Windows 上。autocrlf的概念是透明地处理行尾转换。确实如此!
坏消息 :该值需要手动配置。
好消息 :每个 Git 安装只应该执行一次(也可以按项目设置)。
如何autocrlf作品 :

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:

     repository               repository               repository
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \
   /            \           /            \           /            \
这里crlf = 胜利风格的行尾标记,lf = unix 风格(自 Mac OS X 起也用于 Mac)。
(pre-osx cr 不受上述三个选项中的任何一个的影响。)
此警告何时出现(在 Windows 下)?
autocrlf = true如果你有 unix 风格的 lf在您的一个文件中(= 很少),
autocrlf = input如果你有win-style crlf在您的一个文件中(= 几乎总是),
autocrlf = false - 绝不!
这个警告是什么意思?
警告“LF 将被 CRLF 取代”表示您(拥有 autocrlf = true )将在提交 checkout 周期后丢失您的 unix 风格的 LF(它将被 windows 风格的 CRLF 取代)。 Git 不希望你在 Windows 下使用 unix 风格的 LF。
警告“CRLF 将被 LF 取代”表示您(拥有 autocrlf = input )将在提交 checkout 周期后丢失您的 windows 样式 CRLF(它将被 unix 样式 LF 取代)。不要使用 input在 Windows 下。
另一种展示方式autocrlf作品
1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x
其中 x 是 CRLF(windows 风格)或 LF(unix 风格),箭头代表
file to commit -> repository -> checked out file
如何修复 core.autocrlf 的默认值在 Git 安装期间选择并存储在系统范围的 gitconfig 中(%ProgramFiles(x86)%\git\etc\gitconfig 在 Windows 上,/etc/gitconfig 在 Linux 上)。还有(按以下顺序级联):
– “全局”(每个用户)gitconfig 位于 ~/.gitconfig , 完后还有
$XDG_CONFIG_HOME/git/config 处的“全局”(每个用户)gitconfig或 $HOME/.config/git/config
.git/config 上的“本地”(每个 repo)gitconfig在工作目录中。
所以,写git config core.autocrlf在工作目录中检查当前使用的值和
git config --system core.autocrlf false # 每个系统的解决方案
git config --global core.autocrlf false # 每个用户的解决方案
git config --local core.autocrlf false # 每个项目的解决方案
警告
git config设置可以被 gitattributes 覆盖设置。
crlf -> lf转换仅在添加新文件时发生,crlf repo 中已经存在的文件不受影响。
道德 (对于 Windows):
- 使用 core.autocrlf = true如果您也打算在 Unix 下使用这个项目(并且不愿意将您的编辑器/IDE 配置为使用 unix 行尾),
- 使用 core.autocrlf = false如果您打算仅在 Windows 下使用此项目(或者您已将编辑器/IDE 配置为使用 unix 行尾),
- 从不使用 core.autocrlf = input除非您有充分的理由(例如,如果您在 Windows 下使用 unix 实用程序或遇到 makefile 问题),
PS 安装 Git for Windows 时要选择什么?
如果您不打算在 Unix 下使用任何项目,请不要同意默认的第一个选项。选择第三个( 按原样 checkout ,按原样提交 )。您不会看到此消息。曾经。
PPS:我个人的偏好是配置编辑器/IDE 使用 unix 风格的结尾,并设置 core.autocrlffalse .

关于linux - Git 用 CRLF 替换 LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967370/

相关文章:

c - 环形缓冲区困难

windows - NtQueryInformationProcess 的替代方法来获取命令行

git - 无法推送到 Github

php - 我怎样才能找出一个进程在 Linux 中运行的是哪个 PHP 脚本?

java - 在远程服务器上的 linux 控制台中调试或跟踪 java 应用程序

.net - 使用 C++ 检查客户端上可用的 .NET 框架

windows - 在TD代理管理提示上运行命令

git - 从 teamcity buildstep 运行 git 命令

python - git log --follow,gitpython方式

linux - 使用 awk 解析在字段中包含逗号的制表符分隔文件