繁体   English   中英

Git - 在 Linux 上使用 Linux 样式的行结尾,在 Windows 上使用 Windows 样式的行结尾

[英]Git - Use Linux-style Line Endings on Linux and Windows-style Line Endings on Windows

我有可以在 Linux 和 Windows 上运行的代码(用 C# 编写)。 作为自动化构建过程的一部分,单元/集成测试在 TeamCity 构建机器上运行。 如果进行更改,它将同时触发 Linux 和 Windows 构建,并且将在 Linux 和 Linux 和 ZAEA234406EB289CE0AACDB6406.EB28CE0AACDB6406.

这些构建代理使用git来下拉源/构建/测试。

The desired behavior is for the Linux agent to have source code using Linux style (LF) line endings, while the Windows agent's code will have Windows style (CR LF) line endings. 原因是代码使用多行字符串文字作为某些单元测试的输入,而被测代码使用Environment.NewLine

var example = @"This is a really,
really long string";

在 Linux 和 Windows 中,我想让系统定义的 Environment.NewLine 出现在字符串中,但鉴于我的限制,我一直无法做到这一点。

我无权访问构建代理。 它需要完成工作的任何设置或值都需要在我的源代码中捕获,而不是机器上的某些本地值。 我有限的理解告诉我,我应该依赖.gitattributes文件,虽然我已经看到,甚至稍微了解了一些可以在.gitattributes文件中使用的行尾的各种设置。

我不能只配置 Windows 机器使用core.autocrlf=true和 Linux 机器使用core.autocrlf=false或一些变体,除非我只能通过添加或修改包含在我的存储库中的文件来做到这一点。

考虑到我的限制,有没有办法使用 git 来实现这一点?

我不能只配置 Windows 机器使用 core.autocrlf=true 和 Linux 机器使用 core.autocrlf=false

完美, core.autocrlf应该(几乎)始终设置为 false

代码本身只能是 LF:它将被 Windows 和 Linux 上的 IDE 正确解释。

至于字符串,单元测试代码应该:

  • 检测操作系统
  • 根据操作系统将测试中使用的所述字符串转换为使用 LF 或 CRLF

含义: Git 与单元测试应该如何运行无关。
所述单元测试不应依赖于是否正确配置了外部工具(这里是版本控制工具)。 它们应该独立于任何.gitattributes正确运行:它们的代码应该负责构建预期结果。

Git 默认对文本文件执行行结束转换。 如果您希望文件的行尾被转换,您可以通过在.gitattributes文件中标记它们来将它们标记为文本:

*.cs text

如果您希望 Git 自动猜测哪些文件是文本,那么您应该编写如下内容:

* text=auto

假设您的构建代理没有覆盖行尾的自定义 Git 配置,这足以让 Git 将行尾转换为本地行尾。 如果您想明确一点,可以将core.eol设置为native执行克隆,如下所示: git -c core.eol=native clone URL

但是,话虽如此,在您的代码中对行尾进行假设通常不是一个好主意。 If your users are using the Windows Subsystem for Linux, they may well be using a Unix Git and use Unix line endings in their working tree, and that shouldn't affect the correctness of your unit tests. 出于功能原因(例如,shell 脚本在任何平台上都不能与 CRLF 结尾一起使用),行尾应明确设置为 LF 或 CRLF,或者根据用户的开发环境自行决定。

如果您需要在测试中显式使用平台的本机行尾,您应该编写一个显式字符串,该字符串将根据平台进行适当解析,或者将您的测试字符串包装在基于平台转换它们的帮助程序 function 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM