我基于Perforce的项目使用相同的Shell脚本(例如build_project.sh
)支持Linux和Cygwin平台。但是Perforce将文本文件的行尾默认为本地平台(Docs)。这会导致脚本中出现\r\n
换行符.sh
,这在Cygwin上失败。
到目前为止,我想到的一些想法:
有没有办法使Cygwin接受\ r \ n文件?(无需运行dos2unix
,文件将以只读方式获取)。
有没有一种方法可以将特定文件设置为文本,但是每个人都可以使用Unix行尾?(我猜是“不”,但以为我会检查。)
当然,我可以将整个工作区的行尾设置为\n
(unix)。但这使Windows客户端对其.bat
文件而\n
不是感到不满意\r\n
。同样,如果设置是针对每个工作空间的(我不记得了),那么对于新的Windows用户,工作空间设置会稍微困难一些,因为他们必须设置该选项。
将.sh
文件设置为“二进制”,但随后我们将丢失这些文件上的文本差异。有没有解决方法?这是常见的(好)黑客吗?
这是一个相当小的问题,但我怀疑其中有些人对此模式具有BKM。
谢谢。
编辑:在这个问题上,克雷格(Craig)的回答似乎表明,\r\n
如果最初以这种方式提交,则使用Unix行尾将仅保留带有的文件。
编辑:要强制bash(即Cygwin)接受带有\r\n
结尾的文件,可以set -o igncr
在脚本中指定。如果有人希望Cygwin用户可能不太懂Unix(我的情况),或者由于某些其他原因我们无法在以下解决方案中全局添加触发器,那么这很好。
我相信,当您安装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%"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句