Svn ^通过subversion在Windows Linux上运行

Svn ^通过subversion在Windows Linux上运行,svn,shell,eol,Svn,Shell,Eol,我们已经编写了一个补丁,用shell脚本替换数据文件中提供的^M字符 sed 's/^M//g' source_file > target_file 但是由于我们使用subversion对shell脚本进行源代码控制,并且我已经指定了eol-style:native属性;当我们在UNIX box上执行svn更新时,^M被替换为新行,并成为 sed 's/ //g' source_file > target_file 作为一种更好的做法,我建议将此sed替换为dos2unix do

我们已经编写了一个补丁,用shell脚本替换数据文件中提供的^M字符

sed 's/^M//g' source_file > target_file
但是由于我们使用
subversion
对shell脚本进行源代码控制,并且我已经指定了
eol-style:native
属性;当我们在UNIX box上执行
svn更新时,
^M
被替换为新行,并成为

sed 's/
//g' source_file > target_file
作为一种更好的做法,我建议将此
sed
替换为
dos2unix

dos2unix source_file > target_file
这消除了
^M
字符,但作为副作用它还替换了源文件中不应转换的一些有意义的数据。

所以我们想通过一个shell脚本从数据文件中去掉^M字符,这个脚本不应该提到^M字符,这样就可以通过subversion将它移植到Windows和Linux机器上?


消除此类问题的最佳做法是什么?

关于
sed的/\r$/'
呢?使用
\r
序列表示回车,并且仅在换行前删除它们。

关于
sed的/\r$/'
呢?使用
\r
序列来表示回车,并且仅在换行符之前删除它们。

您看到的是有人在Windows中编辑文件(可能使用记事本)并将文件提交到Subversion存储库中。这会在行结尾处添加错误的生成文件和shell脚本

幸运的是,一个好的程序编辑器(即,不是记事本)可以理解不同文件的行尾是不同的,并且可以保留甚至转换行尾。这意味着,在Windows机器上编写Unix shell脚本或生成文件的人,理论上可以消除您看到的
^M
。我敦促开发人员使用Eclipse之类的IDE来处理这个问题,或者至少使用VIM或Notepad++之类的程序编辑器,但许多人仍然喜欢使用Notepad,把一切都搞砸了

你要做的是给开发人员适当的激励,让他们使用正确的编程环境,并停止弄乱文件

这里有几条建议

  • 你可以把高压线连接到所有开发者的椅子上,当他们使用记事本编辑文件时,立即给他们1000伏的电击

  • 您可以使用Subversion的内置机制来处理这些文件的行结束

  • 虽然第一种方法非常诱人,但我强烈推荐后一种方法。Subversion有一个名为
    svn:eol style
    的属性,可以强制自动创建以文件结尾的正确行。例如,如果我将
    snv:eol style
    设置为
    LF
    ,则在提交或签出文件时,文件将始终具有正确的换行行尾。这样,您就不必进行任何后处理来删除这些行尾。问题解决了

    唯一的问题是执法问题。当开发人员创建新文件或编辑旧文件时,他们还需要将属性
    svn:eol style
    设置为正确的值。Subversion中有一个自动支撑机制可以做到这一点,但您无法确保开发人员使用它

    如果文件没有附加此属性,我使用一个可以拒绝提交文件的属性。您应该能够设置这个钩子脚本,以便只有需要这种类型的行尾的文件(Unix脚本、Makefiles等),而其他不受影响的文件(Java源代码、XML等)

    我的预提交钩子非常容易设置和使用。您可以使用控制文件来设置所需的内容。例如:

    [PROPERTY All Unix Scripts must have "svn:eol-style" set to "LF"]
    match = .\(sh|pl|py|ksh|csh)$
    property = svn:eol-style
    value = LF
    type = string
    
    [PROPERTY All Makefiles must have "svn:eol-style" set to "LF"]
    match = [Mm]akefile
    property svn:eol-style
    value = LF
    type = string
    

    这将确保开发人员首先签入具有正确行尾的文件,这样您就不必在这些文件上运行后期处理脚本。这可以大大简化部署过程,并消除导致错误的最大原因之一。

    您看到的是有人在Windows中编辑文件(可能使用记事本),并将文件提交到Subversion存储库中。这会在行结尾处添加错误的生成文件和shell脚本

    幸运的是,一个好的程序编辑器(即,不是记事本)可以理解不同文件的行尾是不同的,并且可以保留甚至转换行尾。这意味着,在Windows机器上编写Unix shell脚本或生成文件的人,理论上可以消除您看到的
    ^M
    。我敦促开发人员使用Eclipse之类的IDE来处理这个问题,或者至少使用VIM或Notepad++之类的程序编辑器,但许多人仍然喜欢使用Notepad,把一切都搞砸了

    你要做的是给开发人员适当的激励,让他们使用正确的编程环境,并停止弄乱文件

    这里有几条建议

  • 你可以把高压线连接到所有开发者的椅子上,当他们使用记事本编辑文件时,立即给他们1000伏的电击

  • 您可以使用Subversion的内置机制来处理这些文件的行结束

  • 虽然第一种方法非常诱人,但我强烈推荐后一种方法。Subversion有一个名为
    svn:eol style
    的属性,可以强制自动创建以文件结尾的正确行。例如,如果我将
    snv:eol style
    设置为
    LF
    ,则在提交或签出文件时,文件将始终具有正确的换行行尾。这样,您就不必进行任何后处理来删除这些行尾。问题解决了

    唯一的问题是执法问题。当开发人员创建新文件或编辑旧文件时,他们还需要将属性
    svn:eol style
    设置为正确的值。Subversion中有一个自动支撑机制可以做到这一点,但您无法确保开发人员使用它