SVN:“行结束样式不一致” - 故意用^ M签入文件

时间:2009-10-06 21:31:52

标签: svn bash

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

我的代码(bash脚本)中有一个^ M,原因很重要。不幸的是,subversion不会让我检查这个文件。它抱怨说:

svn:提交失败(详情如下):
svn:不一致的行结束样式
svn:您的提交消息保留在临时文件中:

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

5 个答案:

答案 0 :(得分:10)

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

  

这意味着默认情况下是Subversion   不重视这种类型   用于的终端(EOL)标记   你的文件。

然后,本书继续描述如何通过设置svn:eol-style来设置对行结尾的颠覆关注,这正是你想要的。

答案 1 :(得分:1)

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

您可以使用

轻松生成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的解决方案非常好:{{1}灰烬甚至更好:$'\r'。我不确定c='\r是否这样做是因为它是灰烬还是因为它是posix。)

答案 2 :(得分:0)

我假设它被用作字符串或其他东西。 bash有没有办法对字符进行编码?

答案 3 :(得分:0)

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

svn propset svn:eol-style LF myscript.sh

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

答案 4 :(得分:0)

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

查看svnbook的File Content Type部分。