【问题标题】:Why does a file checked into CVS become double-spaced?为什么签入 CVS 的文件会变成双倍行距?
【发布时间】:2010-07-14 21:55:50
【问题描述】:

问题

经常(但不是每次)在使用 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 时,我是否遗漏了一些可能导致此问题的文件?

【问题讨论】:

  • 我在使用 FTP 上传 C 文件时遇到过这种情况,我使用二进制而不是 ASCII 进行上传 - 在您的情况下这是一个可配置的选项吗?
  • 看起来是行结尾。 Windows 做 \r\n 而 unix 只做一个(通常)。因此,unix 正在将一个 Windows Line 结尾转换为 2。也就是说,不知道该过程的哪一部分正在执行此操作。您可以在 Windows 中使用 notepad++ 转换行尾,并使用十六进制编辑器查看它们(NPP 有一个插件十六进制编辑器)。
  • 标准 Unix 行结束符为 '\n';标准的 Windows 行结束字符是 '\r' 后跟 '\n'。如果一切都在 C 中的文本模式下处理(并且 CVS 是用 C 编写的),这并不重要。如果文本文件以二进制模式处理,并且同时存在 Unix 和 Windows 组件,则可能会出现问题。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Windwos-native 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):

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多