在Windows操作系统上安装Git 1.6.4 beta (msysgit)后,如何处理Unix或DOS格式的换行符?

45

我正在为我的Windows Vista开发VPC安装msysgit 1.6.4 beta。一个安装屏幕正在询问我是否要使用Unix的行终止符还是DOS的行终止符。通常我会选择DOS,但是设置文本指出DOS终止符可能意味着文件无法与Git的所有命令行工具一起使用。 Unix的行终止符则表示“...大多数[Windows]应用程序都可以处理...”。

有人知道我应该选择哪个选项以通过shell使用Git进行VS 2008工作吗?

2个回答

133

在msysgit安装过程中的设置实际上是为了修复core.autocrlf config的值。

core.autocrlf

如果设置为true,当从文件系统读取文本文件时,Git会将行末的CRLF转换为LF,并在写入文件系统时进行反向转换。可以将该变量设置为“input”,这样只有在从文件系统读取时才会进行转换,但是文件会以LF作为行末写出。目前,决定哪些路径被视为“text”(即受到autocrlf机制的影响)纯粹是基于其内容。
我坚持不要尝试自动转换任何内容,副作用太重要了(特别是在具有不同环境的分布式开发中可能导致合并冲突)。如果您的工具可以处理类Unix的行终止符,则应将它们设置为生成Unix行,这样Windows(VS2008、Notepad++等)和Unix都可以读取并可以由任何'sh' Git脚本处理。但是,如果将core.autocrlf设置为false,则转换文本行终止符的决定将是一种自愿的显式决定,而不是后台不可见的副作用。

请查看 "如何在不同操作系统之间使用git core.autocrlf进行行结束转换" 了解更多信息

                 | 提交文件时的转换结果       | 从仓库检出时的转换结果 - 
                 | 包含不同EOLs的文件         | 包含混合文件和
                 | 和core.autocrlf值:         | core.autocrlf值:           
--------------------------------------------------------------------------------
文件类型         | true       | input      | false | true       | input | false
--------------------------------------------------------------------------------
Windows-CRLF     | CRLF -> LF | CRLF -> LF | 不变 | 不变      | 不变 | 不变
Unix -LF         | 不变      | 不变      | 不变 | LF -> CRLF | 不变 | 不变
Mac  -CR         | 不变      | 不变      | 不变 | 不变      | 不变 | 不变
Mixed-CRLF+LF    | 不变      | 不变      | 不变 | 不变      | 不变 | 不变
Mixed-CRLF+LF+CR | 不变      | 不变      | 不变 | 不变      | 不变 | 不变


3
自我备注:autocrlf 为 true 的一个棘手的副作用是:https://dev59.com/hnI-5IYBdhLWcg3wF0Uc。 - VonC
1
我不喜欢给你点赞,因为你的声望已经非常高了,但是我为了找到那个表格搜索了很多,所以我必须点赞 :) - Ciro Santilli OurBigBook.com
1
我们处于一个混合文件类型的异构环境中。我们绝对希望core.autocrlf=false。但我无法在任何地方找到如何将其设置为“项目级别”的方法,这样我就不必依赖于每个开发人员正确设置自己的配置。 - Ed Randall
2
@EdRandall 最接近的可能是:https://dev59.com/_pHea4cB1Zd3GeqPrZmS#34013278,但仍需要手动配置git才能激活smudge。简短的答案是:任何项目本地配置都必须由用户激活。它不会自动设置为项目/存储库本身。 - VonC
1
@VonC 最终我做的是在(基于ant的)构建中添加了一个检查,如果用户没有将其设置为false,则会失败。开发人员很快就学会了正确地设置它。 - Ed Randall
显示剩余6条评论

3

Visual Studio 2008可以很好地处理Unix换行符,但它会尝试检测具有不一致换行符的文本文件并尝试修复这些问题。另一方面,记事本无法正确显示Unix文本文件。


41
希望Notepad兼容性不是一个重要的要求。 - Craig McQueen
不,Notepad兼容性不是问题。听起来Unix终止符是更好的选择。谢谢! - Scott Davies
10
除了记事本,每个人在任何电脑上使用的程序都是如此。 - Bennett McElwee
3
@BennettMcElwee 我所知道的每个平台上的每个GUI程序(包括Wordpad)都支持CRLF和LF,没有问题。然而,大多数控制台程序仍然无法处理它。尝试运行以LF结尾的批处理文件或以CRLF结尾的bash/perl/python脚本,并查看结果。即使使用vi(m)打开Windows文本文件,你也会看到很多^M - phuclv
1
至少在现代的 vim 中,你通常只会看到 ^M,当文件具有混合行尾时,这样你就可以看到哪些行有 CRLFs,哪些没有。如果每一行都有相同的行尾,在 Unix 或 DOS 模式下都可以正常工作。 - Soren Bjornstad
2
截至今天,最新版本的记事本已经处理了这个问题。 - Expenzor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接