【问题标题】:How can I convert all line endings to CRLF, LF, or CR during SVN operations如何在 SVN 操作期间将所有行尾转换为 CRLF、LF 或 CR
【发布时间】:2010-09-06 03:40:12
【问题描述】:

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

你是做什么的?

【问题讨论】:

    标签: svn version-control eol


    【解决方案1】:

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

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

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

    【讨论】:

    • svn:eol-style = native 的问题是,如果你有不同的行尾,它会失败。
    • 从 SVN 1.8 开始,自动道具现在也可以在服务器端完成,这可以一劳永逸地解决这个问题。详情见stackoverflow.com/a/25643777/217893
    【解决方案2】:

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

    【讨论】:

    • \;之前不应该有空格吗? ?
    【解决方案3】:

    添加一个pre-commit hook,它会解析文件内容并在写入 SVN 之前为您执行 CRLF/LF/CR/etc 的修改。

    【讨论】:

    • 抱歉,预提交挂钩无法更改工作目录中的文件。预提交挂钩在服务器上运行,因此它甚至无法访问工作目录。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      ([^\r])\n

      替换成

      $1\r\n

      然后您应该选择一堆测试文件,例如:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多