簡體   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