所以,你们都准备好做一个大的 SVN 提交,它会爆炸,因为你的一些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度的文件夹的 1,000 多个文件。
你做什么工作?
所以,你们都准备好做一个大的 SVN 提交,它会爆炸,因为你的一些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度的文件夹的 1,000 多个文件。
你做什么工作?
我不认为pre-commit钩子实际上可以更改正在提交的数据 - 它可以禁止提交,但我认为它不能为您进行转换。
听起来您希望将属性'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
属性放在文件中。将其设置为本机将使用您机器的正确行尾检查文件,但以 Unix 行尾格式存储它们。其他三个选项是 Unix 的“LF”、Windows 的“CRLF”和 Mac OS X 之前的 Mac 的“CR”。大多数人发现“本地人”是最好的。Native 的唯一问题是它不会签入具有混合行结尾的文件,而“LF”和“CRLF”会签入。
一旦你这样做了,你应该得到一个预提交钩子,它允许你在特定文件上强制行结束。然后,教您的开发人员使用autoproperties。预提交挂钩将阻止任何提交,除非将属性放在文件上 开发人员的提交被拒绝一次或两次,他们将自行设置自动属性。
添加一个预提交钩子,它解析文件内容并在将其写入 SVN 之前为您执行 CRLF/LF/CR/etc 的修改。
您可以考虑使用 Linux 的dos2unix之类的命令进行转换。作为一个 Linux 命令,它很容易在批处理模式下与脚本等一起使用。我不知道是否有其他操作系统的等价物。
您可以使用 notepad++ 批量转换行尾。进行正则表达式搜索:
([^\r])\n
并将其替换为
$1\r\n
然后你应该选择一堆测试文件,比如:
*.xml;*.txt;*.csv;...
asf。
这样可以避免您意外修改二进制文件
注意:正则表达式模式跳过空行,因此您必须运行第二个替换作业\n\n
并将其替换为\n\r\n