SVN:“;行尾样式不一致";-有意使用^M签入文件

SVN:“;行尾样式不一致";-有意使用^M签入文件,svn,bash,Svn,Bash,在CentOS 4.2上使用svn 1.3.1版(由于配置受控的CM服务器而无法升级) 我的代码(bash脚本)中有一个^M,这是一个重要原因。不幸的是,subversion不允许我签入此文件。它抱怨说: svn:提交失败(详细信息如下): svn:行尾样式不一致 svn:您的提交消息保留在临时文件中: 我已经证明,从我的代码中删除单个^M可以让它签入。我如何告诉subversion ^M是故意的,它应该允许签入文件?我假设它被用作字符串或其他东西。bash没有编码字符的方法吗?我认为您需要使用

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

我的代码(bash脚本)中有一个^M,这是一个重要原因。不幸的是,subversion不允许我签入此文件。它抱怨说:

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


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

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

我认为您需要使用
svn:eol样式
属性:

svn propset svn:eol-style LF myscript.sh

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

我认为可以将svn:mime type属性设置为非基于文本的属性(如应用程序/八位字节流?)。这可能会使subversion忽略行尾


查看svn手册的部分。

您需要从文件中删除svn:eol样式属性。在添加此属性之前,Subversion不关心文件中的行尾。引述:

这意味着默认情况下,Subversion 不注意类型 中使用的行结束(EOL)标记的数量 你的档案


这本书接着描述了如何通过设置
svn:eol样式
,让subversion关注行结尾,这正是您不想要的。

另一种方法是首先去掉程序中的控制字符;这可能会带来其他兼容性好处,并可能避免将来编辑时出现问题

您可以在bash中使用

`printf '%b' '\015'`
例如:

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

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

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