Svn ^通过subversion在Windows Linux上运行
我们已经编写了一个补丁,用shell脚本替换数据文件中提供的^M字符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
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中有一个自动支撑机制可以做到这一点,但您无法确保开发人员使用它
我