24

所以,你们都准备好做一个大的 SVN 提交,它会爆炸,因为你的一些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度的文件夹的 1,000 多个文件。

你做什么工作?

4

5 回答 5

32

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

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

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

于 2008-08-19T11:35:09.270 回答
6

首先是清理一切。您使用的是 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。预提交挂钩将阻止任何提交,除非将属性放在文件上 开发人员的提交被拒绝一次或两次,他们将自行设置自动属性。

于 2012-03-15T20:20:24.920 回答
2

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

于 2008-08-19T04:39:21.107 回答
2

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

于 2008-08-19T05:43:20.307 回答
0

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

([^\r])\n

并将其替换为

$1\r\n

然后你应该选择一堆测试文件,比如:

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

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

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

于 2020-01-10T11:05:44.707 回答