【问题标题】:Perforce Line Endings per file每个文件的 Perforce 行结尾
【发布时间】:2015-12-22 21:38:21
【问题描述】:

我的基于 Perforce 的项目支持具有相同 shell 脚本的 Linux 和 Cygwin 平台(例如 build_project.sh)。但是 Perforce 将文本文件的行尾默认设置为本地平台 (Docs)。这会导致 .sh 脚本中的 \r\n 换行符在 Cygwin 上失败。

到目前为止我想到的一些想法:

  1. 有没有办法让 Cygwin 接受 \r\n 文件?(无需运行 dos2unix,文件以只读方式获取)。

  2. 有没有办法将特定文件设置为文本,但每个人都使用 Unix 行结尾?(我猜是“不”,但我想我会检查一下。)

  3. 当然,我可以将整个工作区的行尾设置为\n (unix)。但这让 Windows 客户端对他们的 .bat 文件是 \n 而不是 \r\n 感到不满。此外,如果设置是针对每个工作区的(我不记得了),那么对于新的 Windows 用户来说,工作区设置会稍微困难一些,因为他们必须设置该选项。

  4. .sh 文件设置为“二进制”,但随后我们会丢失这些文件上的文本差异。 有解决办法吗?这是常见的(好的)黑客吗?

这是一个相当小的问题,但我怀疑你们中的一些人有这种模式的 BKM。

谢谢。

编辑:克雷格在this question 中的回答似乎表明,如果最初以这种方式提交,使用 Unix 行结尾只会留下带有\r\n 的文件。

编辑:要强制 bash(即 Cygwin)接受带有 \r\n 结尾的文件,可以在脚本中指定 set -o igncr。如果希望 Cygwin 用户可能不太懂 Unix(我的情况),或者由于某些其他原因我们无法在下面的解决方案中全局强加触发器,这很好。

【问题讨论】:

    标签: cygwin perforce


    【解决方案1】:

    我相信,当您安装 Cygwin 时,您可以将其配置为使用 Windows 行尾。暂且不说:

    如果您对每个人都使用“unix” LineEnd,那么您的所有文本文件都将有自己的内部一致的行尾(但不一定与客户端平台一致)。这是因为 Windows 文件最终会将 \r 作为行内容的一部分,因此当以“unix”格式同步时,它们将具有 \r\n 结尾。

    在执行此操作时要注意混合和匹配 LineEnd 设置 - 如果有人使用“win”或“local” LineEnd 同步同一文件,现在他们有 \r\r\n 结尾!因此,如果您想使用每个文件的行结束计划,请确保每个人都使用“unix”作为他们的 LineEnd。使用触发器很容易做到这一点,例如:

    Triggers:
        form-in client "sed -i %quote%s/LineEnd:.*/LineEnd: unix/%quote% %formfile%"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多