【问题标题】:"Inconsistent line ending style" nightmare“不一致的行尾风格”噩梦
【发布时间】:2013-05-19 19:23:21
【问题描述】:

一次提交 2447 个文件时,我完全陷入了 SVN 错误。我在 Windows 7 64 位上使用 TortoiseSVN(最新版本)。

事实上,有些文件是在 Mac 上创建的,而另一些是在 PC 上创建的,所以 TortoiseSVN 停止了提交,并出现了一个恼人的 Inconsistent line ending style 错误。

一开始,为了解决这个问题,我手动打开NetBeans中的有罪文件,添加一个空格,删除它并保存文件,以便NetBeans正确转换所有行结束字符,但似乎有多个“一些文件”被定罪。

【问题讨论】:

  • 我会尝试在 cygwin shell 上使用 unix2dos
  • 写一个小程序,寻找mac风格的终结符,用windows风格代替? Netbeans find&replace with regex 或许也能做到这一点。
  • Notepad++还可以同时查找和替换多个文件,支持搜索\r\n
  • 我更喜欢@assylias 的解决方案。我创建了一个几乎可以工作的正则表达式:\w\n$ - 它选择所有 Unix EOL 字符,除了它还选择开头的第一个字符(\w)......
  • 您可以捕获 w: (\w)\n$ 并替换为 $1\r\n 其中 $1 是字符。

标签: svn windows-7 tortoisesvn eol


【解决方案1】:

您可以捕获 w,(\w)\n$,并将其替换为 $1\r\n,其中 $1 是字符。

用这个正则表达式搜索和替换 NetBeans 就可以了。

我的问题是自定义脚本在这些文件中插入了错误的 EOL 字符(\n 而不是 \r\n)。

(我用@assylias's comment回答了我自己的问题。)

【讨论】:

  • 如果这对您最有效,您为什么不将其标记为答案?
  • @SimonSobisch:可能是因为 stackoverflow 不允许您在 48 小时过去之前接受自己的答案,而且大多数人不值得花时间记住在可能的情况下返回并接受它.
  • @ToolmakerSteve 在这种情况下这不太可能,因为 Epoc 确实接受了他自己的答案两周后发布的答案。我只是问,因为他在回答中明确写道“这对我有用”,但将投票最多的答案标记为“这对我有用”。
  • 最受好评的答案比我的要简单得多。
【解决方案2】:

我在浏览要编辑的存储库时右键单击文件资源管理器打开项目属性窗口,然后选择:

TortoiseSVNPropertiesNew...EOL原样(没有具体停产)确定

【讨论】:

    【解决方案3】:

    为了解决行尾不同的问题,可以如下设置Subversion(SVN)属性:

    svn propset svn:eol-style native my_file
    

    虽然这将解决行尾问题并使合并更容易,但这将意味着 blame 将显示添加 EOL 样式的人作为所有行的更改者,这也意味着您的在进行 diff 时,工作文件最终会被复制到一个临时文件夹中。

    之后可以通过以下方式解决责备问题:

    svn blame my_file -x "--ignore-space-change --ignore-eol-style"
    

    【讨论】:

      【解决方案4】:

      如果您的行尾都井井有条,则可能是您的文本文件有一个 UTF-16 byte order mark (BOM)。

      您可以使用Notepad++ 解决此问题。菜单 编码转换为 UTF-8.

      【讨论】:

      • 不错的收获!出于某种原因,Windows 调度程序将其任务导出为UCS2 LE BOM 编码的 xml 文件:|显然,乌龟不太喜欢那样。转到UTF 后,调度程序仍然能够将它们导入回来,所以这对我有用
      【解决方案5】:

      在Windows 7下,可以使用Notepad++v5.6.8转换EOL字符:

      菜单编辑EOL 转换Windows / Unix / Mac

      【讨论】:

      • 谢谢你!在 GIT 工作了一段时间后,我完全忘记了这一点!
      【解决方案6】:

      相对于the post from Fabian Streitel,实际上Vim正则表达式应该是:1,$s/\r//g以覆盖整个文件。

      在类 Unix 系统上的另一种方法是使用sed

      sed -i '-es/\r//g' <your_file>
      

      【讨论】:

      • 不要将答案称为“就在上面”。它们是按分数排序的,所以“就在上面”可以改变。此外,如果只是更正,这应该是对该答案的评论,而不是单独的答案。你应该澄清你的答案,或者让它独立或删除它。
      • 相关(目前有 41 个声望点):Why do I need 50 reputation to comment? What can I do instead?
      【解决方案7】:

      在Windows下的VimgVim中,损坏的文件都在每行末尾显示^M

      修复它::s/\r//g 删除损坏的额外行尾。

      【讨论】:

        【解决方案8】:

        Notepad++ 中,选择菜单查看显示符号显示行尾

        在搜索框(Ctrl + F)中,选择正则表达式搜索模式,搜索字符串:

        [^\r]\n$

        (翻译:\n 前面没有 \r)。

        这将直接为您带来问题行,您将看到以 LF 结尾的行而不是 CR-LF 对。

        【讨论】:

        • 你确定字符组后面的点是正确的吗? AFAICS,此正则表达式选择包含 anything but a \r 后跟 anything 后跟 \n 的行。表达式不应该是[^\r]\n$吗?
        • 谢谢,不应该在那里。此表单为我找到了以 \n 而不是 \r\n 结尾的行。固定
        • 我的 NP++ 匹配 $\r\n 而不是 \r\n$(将行尾计为字符 before 行分隔符),以防万一有人遇到问题
        猜你喜欢
        • 2020-02-25
        • 2017-03-21
        • 1970-01-01
        • 2016-08-11
        • 2010-12-21
        • 2020-03-14
        • 2010-11-13
        • 2010-12-22
        • 1970-01-01
        相关资源
        最近更新 更多