【问题标题】:SVN: "Inconsistent line ending style" - Checking in a file with ^M intentionallySVN:“行尾样式不一致” - 故意用 ^M 签入文件
【发布时间】:2009-10-06 21:31:52
【问题描述】:

在 CentOS 4.2 上使用 svn 版本 1.3.1(由于配置控制的 CM 服务器无法升级)。

出于一个重要原因,我的代码(一个 bash 脚本)中特别包含一个 ^M。不幸的是,颠覆不会让我签入这个文件。它抱怨说:

svn:提交失败(详情如下):
svn:行尾样式不一致
svn:您的提交信息被留在了一个临时文件中:

我已经证明从我的代码中删除单个 ^M 允许它被检入。我如何告诉 subversion ^M ​​是故意的并且它应该允许检入文件?

【问题讨论】:

    标签: svn bash


    【解决方案1】:

    您需要从文件中删除 svn:eol-style 属性。在添加此属性之前,Subversion 并不关心文件中的行尾。引用subversion book

    这意味着默认情况下,Subversion 不注意类型 行尾 (EOL) 标记用于 你的文件。

    这本书接着描述了如何通过设置 svn:eol-style 让 subversion 关心行尾,而这正是你想要的。

    【讨论】:

      【解决方案2】:

      另一种方法是首先去掉程序中的控制字符;这可能具有其他兼容性优势,并可能避免将来出现编辑问题。

      您可以使用 bash 轻松生成\r

      `printf '%b' '\015'`
      

      所以,例如:

      $ echo abc`printf %b '\015'`def
      def
      $ 
      

      或者:

      $ c=`printf %b '\015'`
      $ set | grep ^c=
      c=$'\r'
      $ 
      

      (注意:我知道有比调用 printf 更简单的方法。不幸的是,这些更简单的方法在 bash 和 posix shell 中是不同的。仅 bash 的解决方案非常好:$'\r'。 Ash-only 更好:c='\r。我不确定 ash 这样做是因为它是 ash 还是因为它是 posix。)

      【讨论】:

        【解决方案3】:

        我假设它被用作字符串或其他东西。 bash 没有编码字符的方法吗?

        【讨论】:

          【解决方案4】:

          我认为您需要使用svn:eol-style 属性:

          svn propset svn:eol-style LF myscript.sh
          

          将导致 Subversion 始终将文件视为具有 LF 样式的行尾。

          【讨论】:

            【解决方案5】:

            我认为您可以将 svn:mime-type 属性设置为非基于文本的属性(例如 application/octet-stream ?)。这可能会使 subversion 忽略行尾。

            查看 svnbook 的 File Content Type 部分。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-10-25
              • 2011-08-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多