关于版本控制:如何在SVN操作期间将所有行尾转换为CRLF,LF或CR

关于版本控制:如何在SVN操作期间将所有行尾转换为CRLF,LF或CR

How can I convert all line endings to CRLF, LF, or CR during SVN operations

因此,您都准备好进行大型SVN提交,并且它会爆炸,因为某些文件中的行尾不一致。 有趣的是,您正在查看1000个文件,这些文件跨越了数十个不同深度的文件夹。

你是做什么?


我认为预提交挂钩实际上不能更改正在提交的数据-它可以禁止提交,但是我认为它不能为您完成转换。

听起来好像您希望将'svn:eol-style'属性设置为'native'一样-这将自动将换行符转换为平台上使用的任何内容(使用'CRLF','CR'或'LF'来获取这些内容,无论操作系统需要什么)。

您可以使用自动属性,以便将来创建的所有文件都具有此属性集(自动道具是在客户端处理的,因此您必须为每个用户进行设置)。


首先是清理一切。您在Windows还是Unix / Linux / Mac上?

如果您使用的是Unix / Linux / Mac,则可以尝试以下操作:

1
$ find . -type f -name"*.java" -exec dos2unix {}\;

那是如果您的包装上有dos2unix。它不在我的Mac上,也不在我们拥有的六台Linux机器上。好像我们没有安装此特定软件包。幸运的是,它很容易找到。

使用它时要小心,因为您不想破坏二进制文件。

清理完所有内容后,应在文件上放置svn:eol-style属性。将其设置为native将会检出文件,该文件的行尾与您的计算机正确,但以Unix行尾格式存储。其他三个选项是Unix的" LF",Windows的" CRLF"和Mac OS X之前的Mac的" CR"。大多数人都认为"本机"是最好的。 Native的唯一问题是它不会签入带有混合行尾的文件,而" LF"和" CRLF"会。

完成此操作后,您将获得一个预先提交的挂钩,该挂钩将使您可以在特定文件上强制使用行尾。然后,教您的开发人员使用自动属性。除非将属性放置在文件上,否则预提交钩子将阻止任何提交。开发人员将其提交拒绝一次或两次,然后他们将自行设置自动属性。


您可以考虑使用类似Linux的dos2unix的命令进行转换。作为Linux命令,很容易在批处理模式下将其与脚本等一起使用。我不知道其他操作系统是否具有等效功能。


添加一个预提交钩子,该钩子在将文件内容写入SVN之前会解析文件内容并为您执行CRLF / LF / CR / etc的修改。


推荐阅读