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

时间:2008-08-19 04:22:34

标签: svn version-control eol

所以,你已经准备好做一个大的SVN提交并且因为你的某些文件中的行结尾不一致而爆炸。有趣的是,您正在查看1,000个文件,其中包含数十个不同深度的文件夹。

你做什么?

5 个答案:

答案 0 :(得分:32)

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

听起来你希望property'svn:eol-style'设置为'native' - 这会自动将换行符转换为平台上使用的内容(使用'CRLF','CR'或' LF'无论操作系统想要什么,都能得到那些。

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

答案 1 :(得分:6)

首先要清理一切。你在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”将会。

一旦你这样做,你应该得到一个pre-commit hook,允许你对特定文件强制执行行结尾。然后,教你的开发人员使用autoproperties。预提交挂钩将阻止任何提交,除非将属性放在文件上开发人员将其提交拒绝一次或两次,并且他们将自己设置自动属性。

答案 2 :(得分:2)

添加pre-commit hook解析文件内容,并在写入SVN之前为您执行CRLF / LF / CR /等的修改。

答案 3 :(得分:2)

您可以考虑使用Linux dos2unix之类的命令进行转换。作为一个Linux命令,很容易在批处理模式下使用脚本等。我不知道是否有其他操作系统的等价物。

答案 4 :(得分:0)

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

([^\r])\n

并替换为

$1\r\n

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

*.xml;*.txt;*.csv;... asf。

这避免了您意外修改二进制文件

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