如何在SVN操作期间将所有行尾转换为CRLF、LF或CR

如何在SVN操作期间将所有行尾转换为CRLF、LF或CR,svn,version-control,eol,Svn,Version Control,Eol,所以,您已经准备好执行一个大型SVN提交,它会爆炸,因为您的一些文件中有不一致的行尾。有趣的是,你看到的是1000个文件,跨越数十个不同深度的文件夹 你做什么?< /P> < P>添加一个解析文件内容并在写入到Svn之前对CRLF/LF/CR/等进行编译。 > P>你可以考虑使用像Linux那样的命令进行转换。作为一个Linux命令,它很容易在批处理模式下与脚本等一起使用。我不知道是否有其他操作系统的等效命令。我认为钩子实际上不能更改正在提交的数据-它可以禁止提交,但我认为它不能为您进行转换 听

所以,您已经准备好执行一个大型SVN提交,它会爆炸,因为您的一些文件中有不一致的行尾。有趣的是,你看到的是1000个文件,跨越数十个不同深度的文件夹


<>你做什么?< /P> < P>添加一个解析文件内容并在写入到Svn之前对CRLF/LF/CR/等进行编译。

> P>你可以考虑使用像Linux那样的命令进行转换。作为一个Linux命令,它很容易在批处理模式下与脚本等一起使用。我不知道是否有其他操作系统的等效命令。

我认为钩子实际上不能更改正在提交的数据-它可以禁止提交,但我认为它不能为您进行转换

听起来您希望将“svn:eol style”设置为“native”-这将自动将换行符转换为您平台上使用的任何换行符(使用“CRLF”、“CR”或“LF”来获取这些换行符,而不管操作系统需要什么)


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

首先是清理所有内容。您使用的是Windows还是Unix/Linux/Mac

如果您在Unix/Linux/Mac上,可以尝试以下操作:

$ 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”会签入


一旦您这样做了,您应该得到一个允许您在特定文件上强制执行行尾的命令。然后,教开发人员如何使用。预提交钩子将阻止任何提交,除非属性放在文件上,否则开发人员会拒绝提交一次或两次,并且他们会自行设置自动属性。

您可以使用记事本++批量转换行尾。 进行正则表达式搜索:

([^\r])\n

并将其替换为

$1\r\n

然后,您应该选择一组测试文件,如:

*.xml;*。txt;*。csvasf

这样可以避免意外修改二进制文件


注意:正则表达式模式跳过空行,因此您必须使用
\n\n
运行第二个替换作业,并将其替换为
\n\r\n

抱歉,预提交挂钩无法更改工作目录中的文件。预提交钩子在服务器上运行,因此它甚至无法访问工作目录。svn:eol style=native的问题是,如果您有不同的行尾,它将失败。从svn 1.8开始,自动道具现在也可以在服务器端完成,这可以一次性解决此问题。有关详细信息,请参阅\;;之前是否应该有空格?