SVN - Cross-platform Linux/Windows 项目 - Visual Studio 总是搞乱文件
SVN - Cross-platform Linux/Windows projects - Visual Studio always messing up files
我有几个为 Linux 和 windows 构建的库。 Linux 版本通过根目录中的 Makefile
构建,Windows 版本是使用完全相同源文件的 Visual Studio 2010 项目。 Platform-specific 代码在硬件抽象层 header (.h
) 文件中处理,该文件处理诸如 strtok_s()
与 strtok_r()
、Visual Studio 的 C89 之类的事情限制等
为了减少我的开发人员在处理 SVN 时的头痛,我 运行 在 Linux 框上创建了一个批处理脚本来转换所有源代码的行尾 .c
, .h
, 和 .cpp
文件到 Linux (LF
), 将行结尾的 svn 属性 设置为 "native" (即: svn propset eol-style:native
),并在一次大提交中提交所有文件。
Linux 方面没有问题,但是每当 Windows 用户检出文件(他们使用的是 TortoiseSVN)、进行更改并生成 diff/patch, TortoiseSVN 抱怨行尾不一致。我在 Windows 上使用 GVim 进行了验证,似乎文件都具有 UNIX 样式 (LF
) 行尾,但在 Visual Studio 中更改的文件部分具有 Windows 样式 (CR/LF
) 行结尾。
在Visual Studio中,我已经通过"Advanced Save Options"对话框手动将文件保存为"Unix Line Ending",但是这个设置在SVN提交后似乎没有保留,这导致我怀疑 Visual Studio 项目文件 (.vcproj
) 或解决方案文件 (.sln
) 中没有保存实际的文件选项,但源文件本身的编码只是更改了,并且没有保存在我们的 SVN 服务器上。
我怎样才能 set-and-forget 像这样的项目的行尾,或者 Visual Studio 停止弄乱文件?据我了解,将 EOL-style 设置为 native 意味着客户端以系统的本机编码签出文件,并且它以 "preferred" 格式存储在 SVN 服务器上,因此我不必处理这些问题。
谢谢。
将 eol-type
属性 设置为 native
应该是您所需要的。设置行尾转换的命令是svn propset svn:eol-style native yourfile.c
。如果您使用问题中显示的确切 propset
命令,那么使用我列出的语法应该可以解决您的问题。如果您问题中的命令只是一个拼写错误,那么如果您仍然遇到问题,可以尝试以下几种方法。
- 确保您的 Subversion 客户端设置为自动将
eol-style:native
属性 添加到新文件 (command-line, TortoiseSVN)。否则,每当添加新文件时,您都会 运行 再次遇到此问题。
- 在 Windows 机器上检查存储库的新副本。在让 Visual Studio 接触代码之前,确认行尾都是 Windows 风格。使用 Visual Studio 进行一些更改,然后再次检查行尾。如果它们不都是 Windows 风格,那么 Visual Studio 就是罪魁祸首。检查您的设置并确保它不会按原样保留文件并且不会尝试进行任何类型的自动转换或重新编码。
- 检查 Linux 框中的代码并使用
file
utility to inspect each of the source files. The output will show what sort of file endings are used. Ensure that none of your files are reported "with CRLF, LF line terminators". This means that both types of line endings are present, and Subversion's auto-conversion won't always work properly. To resolve this, use the dos2unix
实用程序。
我有几个为 Linux 和 windows 构建的库。 Linux 版本通过根目录中的 Makefile
构建,Windows 版本是使用完全相同源文件的 Visual Studio 2010 项目。 Platform-specific 代码在硬件抽象层 header (.h
) 文件中处理,该文件处理诸如 strtok_s()
与 strtok_r()
、Visual Studio 的 C89 之类的事情限制等
为了减少我的开发人员在处理 SVN 时的头痛,我 运行 在 Linux 框上创建了一个批处理脚本来转换所有源代码的行尾 .c
, .h
, 和 .cpp
文件到 Linux (LF
), 将行结尾的 svn 属性 设置为 "native" (即: svn propset eol-style:native
),并在一次大提交中提交所有文件。
Linux 方面没有问题,但是每当 Windows 用户检出文件(他们使用的是 TortoiseSVN)、进行更改并生成 diff/patch, TortoiseSVN 抱怨行尾不一致。我在 Windows 上使用 GVim 进行了验证,似乎文件都具有 UNIX 样式 (LF
) 行尾,但在 Visual Studio 中更改的文件部分具有 Windows 样式 (CR/LF
) 行结尾。
在Visual Studio中,我已经通过"Advanced Save Options"对话框手动将文件保存为"Unix Line Ending",但是这个设置在SVN提交后似乎没有保留,这导致我怀疑 Visual Studio 项目文件 (.vcproj
) 或解决方案文件 (.sln
) 中没有保存实际的文件选项,但源文件本身的编码只是更改了,并且没有保存在我们的 SVN 服务器上。
我怎样才能 set-and-forget 像这样的项目的行尾,或者 Visual Studio 停止弄乱文件?据我了解,将 EOL-style 设置为 native 意味着客户端以系统的本机编码签出文件,并且它以 "preferred" 格式存储在 SVN 服务器上,因此我不必处理这些问题。
谢谢。
将 eol-type
属性 设置为 native
应该是您所需要的。设置行尾转换的命令是svn propset svn:eol-style native yourfile.c
。如果您使用问题中显示的确切 propset
命令,那么使用我列出的语法应该可以解决您的问题。如果您问题中的命令只是一个拼写错误,那么如果您仍然遇到问题,可以尝试以下几种方法。
- 确保您的 Subversion 客户端设置为自动将
eol-style:native
属性 添加到新文件 (command-line, TortoiseSVN)。否则,每当添加新文件时,您都会 运行 再次遇到此问题。 - 在 Windows 机器上检查存储库的新副本。在让 Visual Studio 接触代码之前,确认行尾都是 Windows 风格。使用 Visual Studio 进行一些更改,然后再次检查行尾。如果它们不都是 Windows 风格,那么 Visual Studio 就是罪魁祸首。检查您的设置并确保它不会按原样保留文件并且不会尝试进行任何类型的自动转换或重新编码。
- 检查 Linux 框中的代码并使用
file
utility to inspect each of the source files. The output will show what sort of file endings are used. Ensure that none of your files are reported "with CRLF, LF line terminators". This means that both types of line endings are present, and Subversion's auto-conversion won't always work properly. To resolve this, use thedos2unix
实用程序。