`
sean_gao
  • 浏览: 230125 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[愚公移山] 团队CVS资源库从CVSNT迁移到Linux

阅读更多

昨天(周五)大家下班后,一个人留在公司,把核心产品开发团队使用了整整1年的CVS资源库从CVSNT移到了Linux平台下,原本以为会很简单很顺利,因为之前类似的移植并不是没有做过,所以预估的时间包括验证在内是1~2个小时,不过最终却花掉4个小时。怎么回事呢?且听我慢慢道来。

经过1年的积累,资源库有400多M,大大小小的Java项目有206个之多。按照最初的计划,移植只需要原封不动的把资源库目录整个从CVSNT服务器拷贝到Linux服务器即可,所以资源库大小和项目多少本来不是啥大问题,但谁料半路却杀出个程咬金:.jar文件在新的资源库checkout到本地后无法正常使用,这还了得?

仔细一看,乖乖,原本"Binary"的文件,在新的资源库下,却变成了"ASCII -kkv",不仅是.jar,其他的二进制文件如.jpg, .exe之类的也是同样的问题。第一反应是CVSNT和Unix经典的CVS在处理RCS文件时还是有些不同,以至于原本在CVSNT下文件类别的标记信息如"Binary"在移植过程中丢失了,变成默认的文本类型。之前有朋友提醒的.doc文件移植后无法打开应该也是同样问题。怎么办?一个文件一个文件的改?肯定不现实。

一种方案是把所有出现的二进制文件类型/后缀名找出来,然后在服务器端批量删除(Linux下写个脚本来做这件事并不难),客户端这边从原资源库checkout最新版本,重定向资源库URL到新的资源库,同步,提交。这招比较狠,但最终没有用,因为在浏览现有资源库时,发现还有不少其他问题,如classes文件夹被加到版本控制中,类似还有.settings文件夹,甚至Thumbs.db,不一而足。时间有限,与其每个Java项目去找一遍,整理出需要删除的文件(夹)清单,然后写脚本,然后强行资源库重定向,不如一步一个脚印把现有资源库的所有Java项目捋一遍,至少心里踏实。于是一狠心、一咬牙,有洁癖的我开始了漫长的"愚公移山":一个项目接一个项目,遇到Binary文件,服务器删之,客户端checkout后从原来的地方拷贝过来,必要的地方加上.cvsignore,再添加提交。*

经过4个小时的努力,终于大功告成:自动编译脚本正确运行,构建成功,客户端IDE(Eclipse)从新的资源库checkout,编译通过,没有红叉。

后记:自己认为计划得再好的事情,真正去做的时候,总还是会遇到这样那样的问题和意想不到的状况,这件事也告诉我自己其实我的前期准备远不够充分,算是自食其果吧。有没有更好的办法,我觉得肯定有,但是在特定的情况下(时间/效率/目标),我相信我的方法还是能够让我自己满意的。还有一点提醒所有CVS的用户,不该提交的文件,最好第一时间加到.cvsignore。子曾经曰过:“纠正错误,时间最早,代价越小”。

* 请勿不假思索的模仿,这样做会丢失掉这些文件的历史版本信息,如果删除的时候不小心,同时还会把历史上存在过的同类型文件删掉。我这里之所以可以这么做,是因为我们的实际情况对这些二进制文件不需要保留历史信息。
分享到:
评论
10 楼 mikecool 2007-04-25  
可以尝试做一个Project的迁徙,因为公司项目的结构相对类似

而在做这个迁徙的时候应当考虑用Scripting Language写,CVS的文件还是比较简单的,大多数的脚本语言都支持对CVS的操作或者对CVS版本文件的直接读写。

迁徙完一个Project然后把脚本的范围可以扩大到整个CVS Repository。这样就没有问题了。
9 楼 sean_gao 2007-04-23  
Scales 写道
我最近也需要将CVSNT移植到HP-UNIX下,除了你用的这个方法外,请问还有更好的办法吗?谢谢!
正式移植之前建议多做些测试,看看有没有什么丢掉的信息。

有时间可以看一下CVSNT的官方网站,CVSNT也有for Linux的版本。
8 楼 Scales 2007-04-23  
我最近也需要将CVSNT移植到HP-UNIX下,除了你用的这个方法外,请问还有更好的办法吗?谢谢!
7 楼 sean_gao 2007-04-14  
ozzzzzz 写道
以前我曾经遇到过一些项目,其关键数据和测试结果都是二进制的文件,结果最后只能做了一个数据库专门记录这些东西。
我猜测基于文件系统的scm系统这个问题可能是通病。


嗯,确实容易让人有这种怀疑和联想。考虑到CVS出现的年代和背景,以及后续开发和更新的滞后,假如它没有太过关注对二进制文件和跨平台移植的良好支持,我觉得也能够理解。不过也许我不是很了解你之前遇到的问题,我使用CVS的感受和你举的例子多少还是有那么点不同:只要不存在不同文件系统和操作系统之间的移植,始终保持在同类系统上跑的话,用户其实感觉不到有任何差别,二进制文件照样OK。

ozzzzzz 写道
不过我觉得可能你还是需要整合一下的好。因为从你上面说的情况看,整合之后的将不仅仅会减少scm的压力,而且也可以代理设计和复用的提升。


嗯,谢谢你的建议,我们会尝试去寻找更优的方式组织我们的代码。
6 楼 ozzzzzz 2007-04-14  
不过我觉得可能你还是需要整合一下的好。因为从你上面说的情况看,整合之后的将不仅仅会减少scm的压力,而且也可以代理设计和复用的提升。
5 楼 ozzzzzz 2007-04-14  
以前我曾经遇到过一些项目,其关键数据和测试结果都是二进制的文件,结果最后只能做了一个数据库专门记录这些东西。
我猜测基于文件系统的scm系统这个问题可能是通病。
4 楼 sean_gao 2007-04-14  
ozzzzzz 写道
做迁移其实风险很大的,特别是时间历史记录问题很难搞。
不过很奇怪,我看到很多svn和cvs以及其他的迁移工具可以很好的完成工作,而cvs和cvsNT的工具反到是没有看得到合适的。
同时我看到你们的项目有206个,我想这里可能也存在一些问题。比如可能有些项目都是一个大项目树上的各个分支,而有些项目则纯粹只是存储型的。我想如果是第一种情况,则首先应该做一个整合,然后迁移。而如果仅仅是存储,则只需要将最终版本直接移到新服务器就可以了。我也只是瞎猜测,希望能得到你的后续说明。
呵呵,这206个项目属于同一个大产品的同一个版本/分支,除了少数是底层框架和第三方类库,其余都是RCP插件,这些插件预备是要被很灵活的拆开和重新组装的,所以很难说怎么整合更合适,至少目前还没有一个大家公认的更好的组织方式,这确实是件很让人头痛的事。

至于历史记录问题,以我实际的移植经历,时间历史记录,乃至branch和tag,都能够正确保留,历史版本也能够正确取回。当然,所有这些现在看来都需要一个前提,那就是不考虑二进制文件。
3 楼 ozzzzzz 2007-04-14  
做迁移其实风险很大的,特别是时间历史记录问题很难搞。
不过很奇怪,我看到很多svn和cvs以及其他的迁移工具可以很好的完成工作,而cvs和cvsNT的工具反到是没有看得到合适的。
同时我看到你们的项目有206个,我想这里可能也存在一些问题。比如可能有些项目都是一个大项目树上的各个分支,而有些项目则纯粹只是存储型的。我想如果是第一种情况,则首先应该做一个整合,然后迁移。而如果仅仅是存储,则只需要将最终版本直接移到新服务器就可以了。我也只是瞎猜测,希望能得到你的后续说明。
2 楼 sean_gao 2007-04-14  
呵呵,我觉得200多个Java项目还好啦,可能是我们业务相对比较复杂一点。敢这么迁,前提是毕竟CVSNT和经典CVS存储方式基本还是一脉相承,且之前有过成功从CVSNT移植源代码库到Linux平台的经历。<br/>
<br/>
<strong>hiwzg 写道:</strong><br/>
<div class='quote_div'>1年时间就已经有200多个JAVA项目,怎么会有这么多??你们公司厉害。<br/>
<br/>
迁移配置服务器需要很大的勇气,我公司用的还是Firefly,都没有勇气换调。<br/>
明知FireFly这个鬼东西不好用,还要坚持用它。据说是老板认为买了Firefly,所以不用浪费。<br/>
<br/>
岂不知道,这样开发不知道浪费了我们多少宝贵的时间。<br/>
<br/>
<br/>
<strong>sean_gao 写道:</strong><br/>
<div class='quote_div'><br/>
昨天(周五)大家下班后,一个人留在公司,把核心产品开发团队使用了整整1年的CVS资源库从CVSNT移到了Linux平台下,原本以为会很简单很顺利,因为之前类似的移植并不是没有做过,所以预估的时间包括验证在内是1~2个小时,不过最终却花掉4个小时。怎么回事呢?且听我慢慢道来。<br/>
<br/>
经过1年的积累,资源库有400多M,大大小小的Java项目有206个之多。按照最初的计划,移植只需要原封不动的把资源库目录整个从CVSNT服务器拷贝到Linux服务器即可,所以资源库大小和项目多少本来不是啥大问题,但谁料半路却杀出个程咬金:.jar文件在新的资源库checkout到本地后无法正常使用,这还了得?<br/>
<br/>
仔细一看,乖乖,原本"Binary"的文件,在新的资源库下,却变成了"ASCII -kkv",不仅是.jar,其他的二进制文件如.jpg, .exe之类的也是同样的问题。第一反应是CVSNT和Unix经典的CVS在处理RCS文件时还是有些不同,以至于原本在CVSNT下文件类别的标记信息如"Binary"在移植过程中丢失了,变成默认的文本类型。之前有朋友提醒的.doc文件移植后无法打开应该也是同样问题。怎么办?一个文件一个文件的改?肯定不现实。<br/>
<br/>
一种方案是把所有出现的二进制文件类型/后缀名找出来,然后在服务器端批量删除(Linux下写个脚本来做这件事并不难),客户端这边从原资源库checkout最新版本,重定向资源库URL到新的资源库,同步,提交。这招比较狠,但最终没有用,因为在浏览现有资源库时,发现还有不少其他问题,如classes文件夹被加到版本控制中,类似还有.settings文件夹,甚至Thumbs.db,不一而足。时间有限,与其每个Java项目去找一遍,整理出需要删除的文件(夹)清单,然后写脚本,然后强行资源库重定向,不如一步一个脚印把现有资源库的所有Java项目捋一遍,至少心里踏实。于是一狠心、一咬牙,有洁癖的我开始了漫长的"愚公移山":一个项目接一个项目,遇到Binary文件,服务器删之,客户端checkout后从原来的地方拷贝过来,必要的地方加上.cvsignore,再添加提交。*<br/>
<br/>
经过4个小时的努力,终于大功告成:自动编译脚本正确运行,构建成功,客户端IDE(Eclipse)从新的资源库checkout,编译通过,没有红叉。<br/>
<br/>
后记:自己认为计划得再好的事情,真正去做的时候,总还是会遇到这样那样的问题和意想不到的状况,这件事也告诉我自己其实我的前期准备远不够充分,算是自食其果吧。有没有更好的办法,我觉得肯定有,但是在特定的情况下(时间/效率/目标),我相信我的方法还是能够让我自己满意的。还有一点提醒所有CVS的用户,不该提交的文件,最好第一时间加到.cvsignore。子曾经曰过:“纠正错误,时间最早,代价越小”。<br/>
<br/>
* <em>请勿不假思索的模仿,这样做会丢失掉这些文件的历史版本信息,如果删除的时候不小心,同时还会把历史上存在过的同类型文件删掉。我这里之所以可以这么做,是因为我们的实际情况对这些二进制文件不需要保留历史信息。</em><br/>
</div>
<br/>
<br/>
<br/>
</div>
<br/>
<br/>
<br/>
1 楼 hiwzg 2007-04-14  
1年时间就已经有200多个JAVA项目,怎么会有这么多??你们公司厉害。<br/>
<br/>
迁移配置服务器需要很大的勇气,我公司用的还是Firefly,都没有勇气换调。<br/>
明知FireFly这个鬼东西不好用,还要坚持用它。据说是老板认为买了Firefly,所以不用浪费。<br/>
<br/>
岂不知道,这样开发不知道浪费了我们多少宝贵的时间。<br/>
<br/>
<br/>
<strong>sean_gao 写道:</strong><br/>
<div class='quote_div'><br/>
昨天(周五)大家下班后,一个人留在公司,把核心产品开发团队使用了整整1年的CVS资源库从CVSNT移到了Linux平台下,原本以为会很简单很顺利,因为之前类似的移植并不是没有做过,所以预估的时间包括验证在内是1~2个小时,不过最终却花掉4个小时。怎么回事呢?且听我慢慢道来。<br/>
<br/>
经过1年的积累,资源库有400多M,大大小小的Java项目有206个之多。按照最初的计划,移植只需要原封不动的把资源库目录整个从CVSNT服务器拷贝到Linux服务器即可,所以资源库大小和项目多少本来不是啥大问题,但谁料半路却杀出个程咬金:.jar文件在新的资源库checkout到本地后无法正常使用,这还了得?<br/>
<br/>
仔细一看,乖乖,原本"Binary"的文件,在新的资源库下,却变成了"ASCII -kkv",不仅是.jar,其他的二进制文件如.jpg, .exe之类的也是同样的问题。第一反应是CVSNT和Unix经典的CVS在处理RCS文件时还是有些不同,以至于原本在CVSNT下文件类别的标记信息如"Binary"在移植过程中丢失了,变成默认的文本类型。之前有朋友提醒的.doc文件移植后无法打开应该也是同样问题。怎么办?一个文件一个文件的改?肯定不现实。<br/>
<br/>
一种方案是把所有出现的二进制文件类型/后缀名找出来,然后在服务器端批量删除(Linux下写个脚本来做这件事并不难),客户端这边从原资源库checkout最新版本,重定向资源库URL到新的资源库,同步,提交。这招比较狠,但最终没有用,因为在浏览现有资源库时,发现还有不少其他问题,如classes文件夹被加到版本控制中,类似还有.settings文件夹,甚至Thumbs.db,不一而足。时间有限,与其每个Java项目去找一遍,整理出需要删除的文件(夹)清单,然后写脚本,然后强行资源库重定向,不如一步一个脚印把现有资源库的所有Java项目捋一遍,至少心里踏实。于是一狠心、一咬牙,有洁癖的我开始了漫长的"愚公移山":一个项目接一个项目,遇到Binary文件,服务器删之,客户端checkout后从原来的地方拷贝过来,必要的地方加上.cvsignore,再添加提交。*<br/>
<br/>
经过4个小时的努力,终于大功告成:自动编译脚本正确运行,构建成功,客户端IDE(Eclipse)从新的资源库checkout,编译通过,没有红叉。<br/>
<br/>
后记:自己认为计划得再好的事情,真正去做的时候,总还是会遇到这样那样的问题和意想不到的状况,这件事也告诉我自己其实我的前期准备远不够充分,算是自食其果吧。有没有更好的办法,我觉得肯定有,但是在特定的情况下(时间/效率/目标),我相信我的方法还是能够让我自己满意的。还有一点提醒所有CVS的用户,不该提交的文件,最好第一时间加到.cvsignore。子曾经曰过:“纠正错误,时间最早,代价越小”。<br/>
<br/>
* <em>请勿不假思索的模仿,这样做会丢失掉这些文件的历史版本信息,如果删除的时候不小心,同时还会把历史上存在过的同类型文件删掉。我这里之所以可以这么做,是因为我们的实际情况对这些二进制文件不需要保留历史信息。</em><br/>
</div>
<br/>
<br/>
<br/>

相关推荐

    TortoiseCVS-1.12.5+ CVSNT+汉化包

    在TortoiseCVS-1.12.5+ CVSNT的组合中,开发者可以享受到一套完整的版本控制系统,从客户端的直观操作到服务器端的高效管理。汉化包的加入使得国内用户无需担心语言障碍,能更加顺畅地使用这些工具。 安装Tortoise...

    Windows7下安装CVS全攻略(TortoiseCVS-1.12.5+ CVSNT+汉化包)

    汉化: 将文件夹zh-CN放到安装目录下的locale下 Windows7下乱码解决方案: 1.卸载安装TortoiseCVS时自动安装的CVSNT. 2.重新安装CVSNT(运行目录下的cvsnt-server-2.5.05.3489.msi文件)。

    CVS 服务器程序 CVSNT 2.0.58d + CVS 客户端工具 TortoiseCVS 1.10.10 (for win7)+ 图示说明

    CVS 服务器程序 CVSNT 2.0.58d + CVS 客户端工具 TortoiseCVS 1.10.10 (for win7)+ 图示说明 最新的版本cvsnt-2.5.03.2382有4.2MB,追新的朋友可以自己上官网下载. 1都安装好软件 2配置服务器端  a 查看运行...

    讲解如何将CVS服务器版本库迁移到新的CVS服务器上

    本文详细介绍了如何在Windows环境下将CVS服务器版本库从旧服务器迁移到新服务器的过程。整个迁移过程中需要注意的关键点包括:确保数据的完整性和一致性、正确安装和配置CVS服务、及时更新客户端配置信息等。通过...

    cvs安装包(包括cvsnt)

    【cvs安装包(包括cvsnt)】是一款用于版本控制的软件集合,其中包含了cvsnt、Python 2.5.1以及Wincvs这三个关键组件。版本控制系统是IT行业中用于协同开发、追踪代码变更的重要工具,尤其在软件开发项目中不可或缺...

    cvs配套安装_CVSNT@win2003

    cvs配套安装_CVSNT@win2003.rar

    cvs资源及教程、解决汉化、中文乱码、常用操作等

    本人之前都是用的git和svn,跳槽后发现新公司用的cvs,一番研究后决定把资源共享,下载这个应该能解决你的问题,安装包都是官方网站下载的,无毒放心使用,个人整理也花费了一番功夫,所以还是不免费了,有需要的...

    cvs-linux-rpm.tar.gz_cvs r_cvs r_cvs rpm_cvs rpm linux_linux rp

    《Cvsnt在Linux系统中的安装与配置详解》 Cvsnt是一款强大的版本控制系统,它扩展了原始的CVS(Concurrent Versions System)功能,增加了许多企业级特性,如支持多种数据库、SSL加密等。在Linux环境下,Cvsnt提供...

    linux下的cvs

    ### Linux下的CVS配置规则及细节问题 #### CVS简介与安装 CVS(Concurrent Versions System)是一款在开源社区广泛使用的...通过遵循这些步骤,可以确保CVS系统在Linux环境下稳定运行,为团队协作开发提供有力支持。

    从CVS迁移至SVN的两种方法

    从CVS迁移到SVN是提高团队协作效率的重要一步。SVN-Importer和CVS2SVN提供了两种不同的解决方案,可以根据项目需求灵活选择。在迁移过程中,务必备份原有CVS数据,以防止意外损失。同时,迁移后的用户培训和新工作...

    cvsnt-2.5.03.2260.msi 和TortoiseCVS-1.8.26

    每个开发人员可以在本地安装TortoiseCVS客户端,通过CVSNT服务端连接到仓库。在TortoiseCVS的界面下,他们可以轻松地查看代码历史、比较不同版本的差异、解决冲突,并将更改同步到服务器,确保团队成员之间的代码...

    CVS.rar_cvs_cvs Lin_cvs linux_linux c_linux c++

    "CVS.rar_cvs_cvs Lin_cvs linux_linux c_linux c++"这个标题暗示了本指南将涵盖CVS在Linux环境下的使用,以及它与C和C++编程语言的结合。 在描述中提到的“linux下CVS的应用指南”,意味着我们将讨论如何在Linux...

    [CVS服务器]cvsnt-2.5.04.2878-3236

    【CVS服务器】cvsnt-2.5.04.2878-3236 是一个关于源代码版本控制系统CVS(Concurrent Versions System)的服务器软件的特定版本。CVS是一种广泛使用的开源工具,它允许开发团队协同工作,管理项目中的文件和代码更改...

    linux服务器端和windows客户端cvs.rar

    【Linux服务器端与Windows客户端CVS的集成及安装】 CVS(Concurrent Versions System)是一种开源的版本控制系统,常用于管理软件项目的源代码。在Linux服务器端和Windows客户端环境中使用CVS,可以实现跨平台的...

    Tortoise CVS 中文语言包

    1. **集成在Windows资源管理器中**:TortoiseCVS将所有版本控制操作集成到文件资源管理器的右键菜单中,如添加、提交、更新、比较等,使得操作直观且易于上手。 2. **直观的图形界面**:TortoiseCVS提供了丰富的...

    CVSNT 2.0.58d

    总的来说,CVSNT 2.0.58d与TortoiseCVS 1.8.14的组合为开发者提供了强大而灵活的版本控制解决方案,无论是小型项目还是大型团队,都能从中受益。通过这个组合,开发者可以更加高效地协同工作,保证代码的质量和稳定...

    cvsnt.rar -搭建cvs服务器

    6. **权限管理**:CVSNT支持细粒度的权限控制,可以为每个用户或用户组分配不同的读写权限,以确保代码库的安全性。 7. **备份和恢复**:为了防止数据丢失,定期备份CVSNT服务器上的仓库是非常重要的。同时,如果...

    CVSNT-CVS服务端

    CVS是一种广泛应用的开源版本控制系统,它允许开发团队协同工作,同时跟踪对代码库的每一次修改。CVSNT是CVS的Windows NT/2000/XP/2003/Vista/7/8/10及后续版本的优化版本,提供了更强大的功能和更好的性能。 在...

    cvsnt下载或CVS

    【CVSNT下载或CVS】是一个关于版本控制系统的话题,主要关注的是CVS(Concurrent Versions System)的一个特定分支——cvsnt。CVS是一种开放源码的版本控制系统,广泛应用于软件开发中,用于管理代码的变更历史,...

Global site tag (gtag.js) - Google Analytics