为什么检入CVS的文件会变成双倍行距?

时间:2010-07-14 21:55:51

标签: language-agnostic version-control cygwin cvs file-format

问题

当使用CVS签入文件时经常(但不是每次),例如:.java, .cs, .xml等,文件的每一行都会得到一个回车符。

示例:

团队成员登记前的文件

// Begin file
    class Foo
    {
      public Foo()
      {
        // Do step 1
        // Do step 2
      }
    }
// End file
团队成员签出时

文件:

// Begin file

    class Foo

    {

      public Foo()

      {

        // Do step 1

        // Do step 2

      }

    }

// End file

开发环境

  • NetBeans 6.8和现在6.9(使用6.8时也出现问题)。
  • Visual Studio 2008和2010。
  • 存储库:CVS;从Cygwin bash shell完成签到和签出。
  • 操作系统:Widows XP Professional。

我尝试过什么

我尝试在NetBeans下的工具 - >选项中更改值build.compiler.emacs=true,认为这可能会在签入时导致某种Unix / Windows转换问题?这没什么区别。

当我在文件中检查到导致此问题的Windows / IDE / Cygwin堆栈中的CVS时,我是否遗漏了一些文件?

3 个答案:

答案 0 :(得分:3)

有些东西正在将DOS换行符(CR LF)转换为Unix换行符对(只是LF)。我个人打赌它是CVS。您可能想尝试使用TortoiseCVS而不是Cygwin CVS。

答案 1 :(得分:1)

当将文件提交到服务器时,Windwos原生CVS客户端会将文本文件(\ r \ n)中的MS-DOS行结尾转换为Unix样式行结尾,以便在存储库中维护文件以“规范”形式,\n表示行结尾。当Windows本机客户端也将转换从服务器下载文件时结束的行。

但是,我认为默认的Cygwin CVS客户端就像Unix客户端一样,并假设不需要行结束转换。因此,如果您使用该客户端签入具有MS-DOS样式结尾的文件(\ r \ n),您将会遇到这种混淆。

看起来正在使用Cygwin客户端的人正在使用工具来关注将文件转换为MS-DOS样式行结尾(或者某些东西)。

一个潜在的解决方法是卸载Cygwin CVS客户端并在Windows / Cygwin盒子上安装WinCVS客户端,这样即使Cygwin shell处于活动状态,也会使用Windows本机客户端:

在特定模式下配置你的Cygwin安装的另一种可能性(但我对Cygwin并不是很熟悉,知道它有多好用,或者它是否会引入一些问题 - 自从我试过以来已经有很长一段时间了使用Cygwin):

答案 2 :(得分:1)

我遇到的另一种可能性 - 如果文件以Unicode格式保存但以CVS格式存储为ASCII / Text,则会添加额外的行终止符。