在Linux上部署的Rails项目中,CRLF行是否正常?

我有一个Git仓库(原来是CVS,SVN,现在是Git),它包含一个已经在Linux上部署了一段时间的Rails项目。 一切似乎运良好。

现在我已经转换为git,我发现存储库中的许多文件都包含CRLF行结束符 。 我希望它能够保持一致( LF ),但不会损失具有CRLF行尾的每个文件的编辑历史logging。

你能想到我不能离开这些文件的原因吗? 我似乎记得shell脚本或cron文件存在问题,或者对CRLF没有响应。

另外,我知道所有关于Git选项core.autocrlfcore.safecrlf ,但是有没有办法让它将所有文本文件从CRLF转换为LF结帐(对于Linux端) …即一个core.autolf选项或类似的东西?

Solutions Collecting From Web of "在Linux上部署的Rails项目中,CRLF行是否正常?"

如果你可以重写你的版本库的历史(请参阅重写历史记录的问题 ),你可以使用git filter-branch将CRLF转换为LF:

 git filter-branch --tree-filter 'find . -path './.git' -prune -o -type f -exec dos2unix \{} \;' HEAD 

请注意,如果您的存储库中有二进制文件,则必须改进find命令以排除它们。

对davitenio的回答和Daniel Beardsley的评论的评论; 我相信你可以使用这个小程序作为dos2unix的包装:

 #!/bin/sh for f in $@; do if [ $(file -b -n -i -m /dev/null $f | grep -c "text") -gt 0 ]; then dos2unix $f fi done 

虽然可能还有一些失败的情况。