所以,你已经准备好做一个大的SVN提交并且因为你的某些文件中的行结尾不一致而爆炸。有趣的是,您正在查看1,000个文件,其中包含数十个不同深度的文件夹。
你做什么?
答案 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
替换它