因此,您已准备好进行大型 SVN 提交,但它会失败,因为某些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度的文件夹的 1,000 个文件。

你做什么工作?

有帮助吗?

解决方案

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

听起来你想要 财产 '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 行结尾格式。其他三个选项是“LF”(适用于 Unix)、“CRLF”(适用于 Windows)和“CR”(适用于 Mac OS X 之前的 Mac)。大多数人认为“本土”的锻炼效果最好。Native 的唯一问题是它不会签入具有混合行结尾的文件,而“LF”和“CRLF”则会签入。

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

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

您可以考虑使用类似 Linux 的命令 DOS2UNIX 用于转换。作为一个 Linux 命令,很容易在批处理模式下通过脚本等使用它。我不知道其他操作系统是否有等效的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top