【发布时间】:2010-09-06 03:40:12
【问题描述】:
所以,你们都准备好做一个大的 SVN 提交,它会爆炸,因为你的一些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度文件夹的 1,000 多个文件。
你是做什么的?
【问题讨论】:
标签: svn version-control eol
所以,你们都准备好做一个大的 SVN 提交,它会爆炸,因为你的一些文件中的行结尾不一致。有趣的是,您正在查看跨越数十个不同深度文件夹的 1,000 多个文件。
你是做什么的?
【问题讨论】:
标签: svn version-control eol
我不认为pre-commit 钩子实际上可以更改正在提交的数据 - 它可以禁止提交,但我认为它不能为您进行转换。
听起来您希望将 property 'svn:eol-style' 设置为 'native' - 这会自动将换行符转换为您平台上使用的任何内容(使用 'CRLF'、'CR' 或 'LF'无论操作系统想要什么,都可以得到这些)。
您可以使用auto-properties,以便您创建的所有未来文件都设置此属性(自动道具在客户端处理,因此您必须为每个用户设置此属性)。
【讨论】:
首先是清理一切。您使用的是 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。 pre-commit 挂钩将阻止任何提交,除非将属性放在文件上 开发人员的提交被拒绝一两次,他们将自行设置自动属性。
【讨论】:
添加一个pre-commit hook,它会解析文件内容并在写入 SVN 之前为您执行 CRLF/LF/CR/etc 的修改。
【讨论】:
您可以考虑使用类似 Linux 的 dos2unix 之类的命令进行转换。作为一个Linux命令,它很容易在批处理模式下与脚本等一起使用。我不知道是否有其他操作系统的等价物。
【讨论】:
您可以使用 notepad++ 批量转换行尾。 进行正则表达式搜索:
([^\r])\n
替换成
$1\r\n
然后您应该选择一堆测试文件,例如:
*.xml;*.txt;*.csv;...asf.
这样可以避免您意外修改二进制文件
注意:正则表达式模式会跳过空行,因此您必须使用 \n\n 运行第二个替换作业并将其替换为 \n\r\n
【讨论】: