【问题标题】:CVS line endingsCVS 行尾
【发布时间】:2009-09-01 04:58:11
【问题描述】:

我们有大量不同平台的程序员都在使用 CVS。

我们有开发人员使用带有 TortoiseCVS(使用 cvsNT)的 windows

我们有开发人员使用 ubuntu 8.04

我们的开发人员拥有两个盒子 Ubuntu 和 windows。

不同的开发人员在不同的平台上使用各种不同的编辑器。

而且我们在行尾方面遇到了很大的问题。这表现为文件中行尾数的持续增长。

现在据我了解,TortoiseCVS 使用 cvsNT,它假定存储库中的 UNIX 行结尾。当您签出时,它将 UNIX 行结尾转换为 windows 行结尾,当您提交时,它将 windows 行结尾转换回 UNIX 行结尾。

在 ubuntu 中,cvs 客户端不进行任何转换,因为存储库应该是 UNIX 行结尾,而 linux 也使用 UNIX 行结尾。

只要 Windows 上的每个人都使用基于 cvsNT 的客户端,这一切都可以正常工作。而且没有人切换他们的操作系统。

遗憾的是,使用 Ubuntu 和 Windows 机器的人经常切换并可能在不同的操作系统上签出、编辑或提交。

因此,他们最终使用具有 windows 行结尾的 linux CVS 客户端提交了一个文件。

当在 windows 上使用 cvsNT 客户端检查时,CRLF 被转换为显示为两行的 CRCRLF。这种情况发生的次数越多,文件中出现的新行就越多。

有没有办法让 Linux 上的 CVS 在提交时将任何 Windows 行尾转换为 UNIX 行尾,以防止这种情况发生。这样 CVS 服务器将只有 UNIX 行结尾。

也欢迎任何其他解决此问题的方法的建议。

【问题讨论】:

    标签: linux formatting cvs


    【解决方案1】:

    一种方法是要求开发团队强制执行行尾。

    dos2unix 和 unix2dos 在 linux 和 unix 上都很好用。 Windows 上的 cywgin 将提供一个实现。

    你可以有一个脚本来清理人们在签到之前运行的行尾。

    我的主要建议是切换到另一个版本控制系统或关闭神奇的换行符。我从来没有为我提供过神奇的换行转换,我的开发团队一直都有标准编码。它运行得并不完美,但运行得非常好。

    您还可以编写一个简单的脚本,该脚本将在持续集成环境中运行,以扫描增加换行符的更新。然后,您可以拒绝更改或清理问题。

    祝你好运, 雅各布

    【讨论】:

    【解决方案2】:

    我看到 CVS 搞乱行尾的唯一原因是,如果您将文件从一个操作系统复制到另一个操作系统。如果您这样做,您将手动绕过 VCS。那当然是自找麻烦。所以要么停止这样做,要么记得自己清理。

    我不知道在 CVS 中自动检查甚至修复此问题的方法。您是否考虑过切换到 SVN?它的预提交钩子可能是一种方法。 OTOH,一旦您进入 SVN 领域,凭借其对快速创建和销毁私有分支的支持,您可能再也不会绕过 VCS:创建一个分支,在一个平台上检查您对该分支的更改,在另一个平台上平台切换到该分支,并继续在那里工作。重复直到完成,将您的分支合并到主干中,然后将其删除。不会在 VCS 背后将文件从一台机器偷偷传送到另一台机器。少担心一件事。

    【讨论】:

    • 也许考虑切换到 git?现在还有一个 TortoiseGit。
    • 我不知道 git。不过,我已经从 CVS 切换到 SVN —— 事实上,有好几次了。几乎没有什么不同,除了一切都开始几乎像往常一样工作。我想切换到 git 有点多,嗯,不同
    【解决方案3】:

    您可以使用通用命令选项“--lf”强制 unix 行结束。

    例如: cvs --lf up

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多