CVS行尾符

4
我们有许多使用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行尾。
欢迎提出任何其他克服此问题的建议。
3个回答

3
一种方法是要求开发团队强制执行行结尾。在Linux和Unix上,dos2unix和unix2dos都很好用。在Windows上使用cywgin提供的实现即可。
您可以编写一个脚本,在人们提交之前运行以清理行结尾。
我的主要建议是要么切换到另一个版本控制系统,要么关闭魔术行馈线。我从未为自己或我的开发团队提供过魔术行馈线转换,并且我们一直有一个标准编码。它并不完美,但它工作得相当好。
您还可以编写一个简单的脚本,在持续集成环境中运行,扫描增加行馈线的更新。然后,您可以拒绝更改或清理问题。
祝好运, Jacob

我发现特定的CVSNT选项特别难找,所以在这里提供链接:http://evscm.org/manual/html/Substitution-modes.html。 - Leo

3
我所见过的唯一让CVS混乱的原因是如果你将文件从一个操作系统复制到另一个操作系统。如果你这样做,那么你就是在手动规避版本控制系统,这当然会引起麻烦。所以要么停止这样做,要么记得自己清理。我不知道有没有自动检查或修复CVS中此问题的方法。你考虑过转换到SVN吗?它的预提交钩子可能是一种解决方法。另一方面,一旦你进入了SVN领域,它支持快速创建和销毁私有分支,你可能永远不需要绕过版本控制系统了:创建一个分支,在一个平台上检入你的更改,在另一个平台上切换到该分支,并在那里继续工作。重复此过程,直到完成,将你的分支合并到主干中,然后删除它。不要在版本控制系统背后偷偷移动文件。少一件事可担心。

也许考虑转换到Git?现在也有TortoiseGit。 - Chris Huang-Leaver
我不了解git。虽然我已经从CVS转到SVN好几次了。除了一些微小的差别,几乎没有什么区别,而且所有东西都开始像应该一样工作。我想转换到git可能会有点更加不同? - sbi

0

您可以使用通用命令选项“--lf”来强制使用Unix换行符。

例如: cvs --lf up


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接