我每天都使用 Windows、Mac OS X 和 linux。我在所有这些环境中都使用 git,从那些对行尾有不同选择的人使用的 repos 中提取。
在我的情况下设置 core.autocrlf 是否有明确的建议?
我每天都使用 Windows、Mac OS X 和 linux。我在所有这些环境中都使用 git,从那些对行尾有不同选择的人使用的 repos 中提取。
在我的情况下设置 core.autocrlf 是否有明确的建议?
正如我在这个SO question中所做的那样,我建议将其设置为 false。
如果您可以避免修改任何 eol(使用您的编辑器),那么最好在这些 eol 不变的情况下推迟您的工作(即“当您找到它们时”)。
在这些讨论中经常没有提到的一个问题是:如果您在 Windows 上开发 shell 脚本(例如,在 cygwin 中)并使用 CRLF (autocrlf=false) 提交它们,它们将在 *nix 框上崩溃并显示无用的错误消息。(其他脚本语言可能也有类似的情况。)挠头半小时后,你会记住然后dos2unix那些小流氓。如果您在混合环境中工作(例如从 Windows 部署到 linux 服务器)并且您绝对希望将 autocrlf 设置为 false,那么请确保您的所有 Windows 编辑器都使用 unix (lf) 行结尾。否则将 autocrlf 设置为输入(并祈祷)。大多数 21 世纪的 Windows 程序在没有 1980 年代早期的行式打印机 CR 的情况下都很舒服,所以无论如何将行尾设置为 LF (unix) 是个好主意。
对于具有相同文本但二进制表示中的不同行尾(EOL)机制的两个文本文件,GIT 不会有共同的 SHA1 。内容存储为一个 blob,如果另一个相同的副本被存入 re-pository(节省空间!)
GIT(设计人员)采用的默认选择是尽可能使用 *nix 样式的 EOL 字符(仅限 LF),以便对于相同的文本内容,您可以获得相同的 SHA1。(可能是一个重要的考虑因素;-)
因为内容/blob 不再记得用户的原始 EOL 选择(记住它现在可能在某个遥远的存储库中),Git 必须对如何重新创建原始用户的文件(是 CRLF 还是只是简单地)做出一些猜测(基于选项) LF)以您(和您的工具)可以使用的方式。
正常的建议是每个用户在本地 (a) 在提交到 blob 时转换为 *nix LF 结尾(因此所有人都会看到常见的 SHA1 blob 名称)(a/k/a the Right Thing),并且 (b) 在本地设置本地系统设置的重新创建选项,例如 *nix(LF) 或 Windows(CRLF) 等。
为您的用户设置一些本地标准,并拥有一个大的“EOL/LF/CRLF & Whitespace Correction commit”,你会没事的(加上新用户的培训再培训)
您还可以确保您(每个用户)使用通用的空白调整设置,以便制表符 v 空格和尾随空格不会造成更多diff
不便!