如何批量导出CVS服务器Repository folder中的多个项目(Module)
我想,这是我现在知道的解决这个问题的终极方法了。估计比我再年轻点的人可能就很少会接触了。因为他们接触批处理文件(batch file,”.bat” or “.cmd”)的机会貌似比较少。
【主要的处理思路】:
1,首先得到一个包含CVS服务器上Repository folder中的全部Module名字的文本文件。2,一个主批处理文件,依次将每一个Module的名字作为参数去调用一个子批处理文件。3,子批处理文件中,进行checkout。如果需要对签出的资料做的进一步的处理也能写进批处理文件,处理的效率可能更加高一点。
【实现过程】:
1,使用CVS服务器的场所,通常会使用ViewCVC这个提供web查看支持的插件,有了这个插件的帮助,将web页面另存成一个txt,然后稍微手动处理一下,就能得到一个格式类似这样的文本文件。
(下面以我处理的情况为例,我这里的Module名字前面都有特定格式的项目编号,有年份加上顺序号组成。)
2001-041xxxx/
2002-046xxxxxxx/
2003-042xxxxxxxx/
……
2,把第一步得到txt文件,变成主批处理文件(run.bat)。
我使用的编辑器是UltraEdit,通过使用“批量替换”功能,可以很容易的把txt文件每一行的内容,变成类似下面这样的格式:
call %BAT_HOME%\checkout.bat “2001-041xxxx”
因为命令行执行CVS命令,需要一些特别的设置,就像写程序的时候设置全局变量一样。这些设置也最好放在主批处理文件的开头,免得在每一个子批处理文件中反复的执行。
3,编写用于实际签出的子批处理文件(checkout.bat)
如果只是签出,不需要别的处理(也很可能是别的处理你不会用命令行方式解决),那么子批处理文件可能只需要一行:
cvs.exe checkout %1
注释:其实,如果真的只有一行,就没有必要做一个子批处理文件了,直接将主批处理文件中每行的格式变成这样就行了: cvs.exe checkout “2001-041xxxx”
4,最后为了算是我的一个坏习惯,对于这种重用的可能性很小的脚本,我也喜欢做一点提高“可移植性”的设置。
如使用类似:set BAT_HOME=D:\cvs_stat\co_all 来设置自批处理文件的所谓目录
【主批处理实例(也可能应该叫做范例)和详细注释】 (@rem 后面的是注释)
@rem **签出(checkout)位置所在的盘符(因为我的批处理文件和签出目录不在一个盘上)
set CO_DRIVER=E:
@rem **签出到什么地方
set CHECKOUT_WS=E:\CVSR18
@rem **基础目录
set BASEHOME=D:\cvs_stat
@rem **因为我这里各种批处理比较多,才分很多目录。别人应该能把目录简化一些。
set BAT_HOME=%BASEHOME%\batch\co_all
@rem **这个是我的习惯,需要的时候可以恢复PATH。
SET ORGPATH=%PATH%
@rem **将支持命令行调用的CVS客户端TortoiseCVS的路径,加到PATH中。
set PATH=%BASEHOME%\bin\TortoiseCVS;%PATH%
@rem **设置命令行执行CVS命令所必须的环境
@rem **我这里的CVS服务器因为要ext访问,所以需要指定CVS_RSH,TortoiseCVS自带的RSH工具是TortoisePlink.exe,但是调用这个会要求输入密码,导致自动批量运行的目的大打折扣,所以我是用自己包装后的一个自动输入密码的sshpw文件来代替。
set CVS_RSH=%BASEHOME%\bin\TortoiseCVS\sshpw.exe
@rem **指定CVSROOT
set CVSROOT=:ext:test@192.168.30.18:/mnt/public/cvscenter/PRJ_DOC
%CO_DRIVER%
cd %CHECKOUT_WS%
call %BAT_HOME%\checkout.bat “2001-041xxxxx”
….