在CentOS 4.2上使用svn版本1.3.1(由于配置控制的CM服务器而无法升级)。
我的代码(bash脚本)中有一个^ M,原因很重要。不幸的是,subversion不会让我检查这个文件。它抱怨说:
svn:提交失败(详情如下):
svn:不一致的行结束样式
svn:您的提交消息保留在临时文件中:
我已经证明从我的代码中删除单个^ M允许它被检入。我如何告诉subversion ^ M是故意的并且它应该允许文件被签入?
答案 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部分。