git - Git LF替换为CRLF

  显示原文与译文双语对照的内容

使用bash在 Windows XP机器上运行 git 。 我从SVN导出我的项目,然后克隆一个裸仓库。

然后我将导出粘贴到了裸仓库目录中,并执行了以下操作:

 
git add -A

 

然后我得到了一个消息列表说:

LF将被CRLF替换

这里转换的结果是什么? 这是. NET 中的一个解决方案。

时间:

Git有两种方式来处理行尾:


$ git config core.autocrlf
# that command will print"true" or"false" or"input"

你可以通过将 true 或者 false 附加参数添加到上面的命令行 来设置要使用的模式。

如果 core.autocrlf 设置为真,这意味着任何时候将一个文件添加到git仓库中,git认为是文本文件,它将把所有的CRLF行结束,在它存储在提交之前。 只要你 git checkout 东西,文件自动将有它的LF行尾的所有文本转换为CRLF结尾。 这允许一个项目的开发跨平台使用不同line-ending的样式而不被噪音巨大,因为每个编辑器提交更改的行结束样式作为行结束样式总是始终如一的LF 。

你们现在看到的side-effect这方便的转换,。这就是这个警告是关于,是如果你已经编写的一个文本文件最初有 LF,而不是CRLF加后缀,它将被存储在一起要是像往常一样,但是当签出以后它将有CRLF结尾。 对于普通文本文件,这通常很好。 警告是一个"用于你的信息"在本例中,但如果git不正确地评估一个二进制文件作为文本文件,这是一个重要警告,因为git会破坏二进制文件。

如果 core.autocrlf 设置为 false,则不会执行任何line-ending转换,因此将在as-is中检查文本文件。 这通常可以正常运行,只要你的所有开发者都在Linux或者 Windows 上。 但在我的经验中,我仍然倾向于得到带有混合行结尾的文本文件,最终导致问题。

我个人的偏好是把设置打开,作为一个 Windows 开发者。

查看 http://kernel.org/pub/software/scm/git/docs/git-config.html 以获取包含"输入"值的更新信息。

上这些消息是由于不正确的默认值。

autocrlf的概念是透明地处理行尾转换。 而且它 !

错误的news: 值需要手动配置。
好的news:: 每次git安装( 每个项目设置也可能) 只能完成一次。

autocrlf 如何工作:


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

 repo repo repo
///
crlf->lf lf->crlf crlf->lf / 
///

提醒:crlf = win-style end-of-line标记,lf = unix-style 。

注意,cr ( mac-style ) 不受上三个选项的影响。

这里警告显示出来什么时候( Windows 下)

- autocrlf = true 如果你的文件中有 unix-style lf
- autocrlf = input 如果你的文件中有 win-style crlf
- autocrlf = false - 从不 !

这里警告的平均

在commit-checkout周期了警告"将被 CRLF 取代"就表示你( 拥有 autocrlf = true ) 会失去自己 unix-style lf. Git并不希望你用 unix-style LF Windows 下。

commit-checkout周期之后警告" CRLF将被替换为 LF"就表示你( 拥有 autocrlf = input ) 会失去自己 windows-style crlf. 不要使用 input Windows 下。

另一种方式证明 autocrlf 方法计算


1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x

其中 x ( windows-style ) ( unix-style ) arrows


file to commit -> repository -> checked out file

如何修复

core.autocrlf的默认值在git安装期间被选择并存储在系统范围的gitconfig中( %ProgramFiles(x86)%gitetcgitconfig ) 。还有( 按以下顺序级联):

-"全局"( per-user ) gitconfig位于 ~/.gitconfig,但另一个
-"全局"( per-user ) gitconfig位于 $XDG_CONFIG_HOME/git/config 或者 $HOME/.config/git/config
-"本地"( per-repo ) gitconfig在工作目录中的.git/config 处。

因此,在工作目录中写入 git config core.autocrlf 来检查当前使用的值和

- 将 autocrlf=false 添加到系统范围 gitconfig # per-system解决方案
- git config --global core.autocrlf false # per-user解决方案
- git config --local core.autocrlf false # per-project解决方案

道德 ( 用于 Windows ):
- 如果你打算在Unix下使用这个项目,也可以使用 core.autocrlf = true
- 使用 core.autocrlf = false 仅 Windows 下如果计划使用这个项目,
- 对( 例如 Windows 或者如果你遇到下如果你使用的是unix实用程序生成文件问题) 从不使用 core.autocrlf = input,除非你有一个很好的理由,

于相关 P.S 。该怎么选择安装git时
如果你不打算使用你的任何项目中使用默认第一个option,在Unix下,不 agree. 选择第三个( 签出 as-is 。提交 as-is ) 。 你将看不到这里邮件。 曾经。

配置要使用的编辑器/ide P.P.S 。我个人最喜欢是Unix-style结尾和设置 core.autocrlffalse

同时在与 Windows unix2dosdos2unix 是 available. 你可以使用以下命令执行 UNIX(LF) -> DOS(CRLF) 转换。 因此,你将得不到警告。

 
unix2dos filename

 

或者

 
dos2unix -D filename

 

但是,不要在任何现有的CRLF文件上运行这里命令,然后你将在每行中得到空的换行符。

dos2unix -D filename 不能与每个操作系统一起工作。 请检查这里链接是否兼容。

如果出于某种原因,你需要强制命令然后使用 --force 。 如果它表示无效,则使用 -f


git config core.autocrlf false

在vim中打开文件( 例如: :e YOURFILE ),然后输入


:set noendofline binary
:wq

我也有这个问题。

SVN不做任何行结束转换,所以文件是用CRLF行结尾的。 如果随后使用git-svn成了将该项目放入git那么CRLF结尾跨到git存储库,这是不存在的状态git中都希望找到自己- 默认端口是为只有 unix/linux ( LF ) 行尾的签入。

当你在autocrlf转换然后 Windows 上上查看这些文件,使文件保持不变的过程( 因为它们已经为当前平台提供了正确的结束),然而,这些决定了是否有一个区别,将前签入的文件完成相反的转换 比较,导致内容对比它认为是一个存储库中;如果签出文件中的和意外的CRLF 。

在我看来你的选择是:

  1. 在 intial git提交 --all, Re-import使用 git-svn,这将意味着行尾将转换你的代码到新的git存储库,而
  2. 将autocrlf设置为 false,并忽略行尾不在git的首选样式
  3. 用autocrlf签出你的文件,修复所有的行尾,检查所有的内容,然后重新打开。
  4. 重写你的知识库历史,使原始提交不再包含git不期望的CRLF 。 ( 关于历史重写的常见警告)

脚注: 如果选择选项然后 #2 ( rebase,补丁等) 不应付CRLF文件和我的经验是,一些辅助的工具你会最终与文件使用了混合的CRLF和 LF ( 不一致的行尾) 迟早。 我不知道这两者的优点。

我认为 @Basilaungas's的答案是关闭的但过时的( 至少在Mac上) 。

打开 ~/.gitconfig 文件并将 savecrlf 设置为 false

[core] autocrlf = input safecrlf = false

*will 使它忽略行尾字符的结尾。

我不太了解 Windows 上的git,但是,。

看来git正在转换返回格式以匹配运行平台( Windows )的返回格式。 CRLF是 Windows 中默认的返回格式,而LF是大多数其他操作系统的默认返回格式。

很有可能,当代码被移动到另一个系统时,返回格式会被正确调整。 我还认为git足够聪明,可以保持二进制文件不变,而不是试图将LFs转换成 CRLFs,比如 jpeg 。

总之,你可能不需要对这个转换烦恼太多。 但,如果移到存档将项目作为一个打包文件,小伙子编码人员还应该感激有LF行结束符而不是 CRLF 。 根据你对( 根据你不使用记事本)的关注程度,你可能希望设置git以使用LF如果你可以:

附录:CR是ASCII代码 13,LF代码为 10. 因此,CRLF是两个字节,而LF是一个字节。

从 ~/.gitattributes 文件中删除下面的文件

* text=auto

在将阻止git检查

http://www.rtuin.nl/2013/02/how-to-make-git-ignore-different-line-endings/

回显"* -crlf"> 。gitattributes

在单独的提交或者git上执行这里操作时,当你进行单个更改时,可能仍然会看到整个文件( 取决于你已经更改了autocrlf选项)

这确实有效。Git会尊重混合行结束项目中的行尾,而不会警告你。

...