??xml version="1.0" encoding="utf-8" standalone="yes"?>
上来一看,靠!MMq真不少Q这叫市场潜力大Q?
可是GG也不,q叫竞争Ȁ烈;
于是你决定想个办法让各位MM注意你,q叫定位Q?
因此你说你又帅又有钱Q这叫前期炒作;
旁边一L看不惯,说你其实又丑又穷又色眯眯Q这叫恶性竞争;
你向|管告状Q网把他踢了出去,q叫规范市场?
一老哥们证明说Q“其实你是谢停疯W二”,q叫竟合炒做Q?
你问Q“这里有女吗?”,q叫市场调查Q?
有2Q个人同时回{:“我是美女”,q叫泡沫l济Q?
你说Q“谁惛_我聊天?”,q叫发布q告Q?
两美奌见过你,q叫老客P
你飞快的C两个女的联pL式,q叫客户关系理Q?
你厚着脸皮问两个美女你是不是很帅,q叫代言人公养I
q两个美奌你的很帅,q叫联合炒作Q?
你l厚着脸皮让他们介l几个熟识,q叫关系营销Q?
然后不再理她们,q叫开拓新市场Q?
居然Q0个美女都表示要和你聊天,q叫市场垄断Q?
要问Z么会有那么多女找你Q那是因q头֮忠诚度低Q?
你高兴的_“这些美女都是我的”,q叫划分势力范围Q?
你如果说Q“凡北京的美女都是我的”,q叫划分可行的势力范_
如果你又_“恐龙别来找我”,q叫市场l分Q?
旁边一L_“我才是帅哥”,q叫正面竞争Q?
旁边又男的说Q“有沛_的MM吗?“这叫侧面竞争;
旁边又一L_“谁和我聊我l钱谁”,q叫h战;
旁边又一L_“我是版主,不许你强占这么多MM”,q叫政府行ؓQ?
你说Q“那我介l两个跟你聊”,q叫政府公关Q?
你说Q“谁l我钱我和谁聊”,q叫心理战;
l果Q0个美女都抢着向你表达倾慕之情Q这叫卖方市场;
当然Q你q遣散了两个d付版主,q叫寡头市场Q?
可你打字速度太慢Q不能同时和Q0个h聊天Q这叫市场承接力有限Q?
你又_“我看谁眼才和谁聊”,q叫_֓{略Q?
有一女_“还认识很多靓女Q问你要不要介绍Q”这叫销售代理;
又有一女_“发你张我的照片。”这叫电子商务;
又有一女_“谈的开心今晚可以来找我。”这叫发现目标用P
你说Q“那从此我只和你聊”,q叫大客h略;
可是你当然不会只和她聊,q叫成功的大客户战略Q?
你说话会引用鲁迅席慕Ҏv子周星星黑格罗Ҏ皮尔伯格Q这叫文化营销Q?
你说Q“我能歌善舞会写诗”,q叫优势展示Q?
你又_“我好象׃你了”,q叫客户xQ?
她说Q“呸Q我才不信呢”,q叫客户的逆向反映Q?
你接着_“真的,是真的”,q叫IBMQ?
或者你_“不信我M家把心掏l你”,q叫DELLQ?
或者你_“不信我你还能信谁?”,q叫微YQ?
你还可以_“我会慢慢让你相信的”,q叫通用Q?
如果她说Q“得了吧”,q叫理性消费者;
如果她说Q“那我暂且信你一会儿吧”,q叫阶段性成果;
q时你说Q“XXXXXXXXXXXQ省?000字)”,q叫市场培育Q?
然后你说Q“我来喜Ƣ你了”,q叫合理诱导Q?
然后你又_“我们见面吧”,q叫q入实质销售阶D;
她当然会习惯性的拒绝Q这叫假性拒l;
于是你说Q“那你来找我吧”,q叫_N消费者心理学Q?
奚wQ“这不一样吗Q”,q叫再次获得销售机会;
于是你又_“当然不一P我们可以去SogoQ然后在仙踪林喝茶”,q叫q景׃nQ?
你又_“我在那看见q一瓉水我想一定适合你”,q叫促销Q?
她说Q“我才不要香水呢”,q叫需求调查失误;
你只好说Q“本来是想给你买衣服Q可是不知道你的码Q要不一起去看看吧”,q叫I头支票Q?
正好她确实想M衣服Q这叫真理瞬_
可是她对你的有些q意不去Q“你是我什么h帮我买呀”,q叫售前交涉Q?
于是你就坡下_“那你买Q我帮你把关”,q叫及时降低销售成本;
当然你要说明Q“我请你吃饭Q我帮你拎包Q我开车送你”,q叫服务承诺Q?
于是你们军_在SOGO见面Q这叫签单;
临关电脑前你揭穿了版d胁你的丑恶嘴脸,q叫q华?br />
]]>
一、需要的软g
1、CVSNT
CVSNT是目前在Windowsq_上构建CVS服务器最方便的工P操作单,以Windows服务E序的Ş式运行。目前CVSNT已被UL到其它^台如Linux上?br />选用版本Q?.0.58d?br />选用q个版本而不是最新的2.5.x的原因是2.5.x改变了History文g的格式,影响了我们后面介l的CVSTracNT的运行。当Ӟ如果你不使用CVSTracNTQ选用2.5.x也没有问题,其操作与2.0.58d基本相同Q也十分的简单?br />下蝲地址Q?a target="_blank" rel="nofollow">http://www.cvsnt.org
2、CVSTracNT
CVSTracNT是一个基于Web的CVS源代码跟t工兗用CVSTracNTQ你可以跟踪源代码的变更Q提交Q务单Q创建里E碑Qƈ通过Web的方式查看、比较源代码文g。对于CVSpȝ本n来说Q是一个非常有益的补充?br />选用版本Q?.1.5 Build20050703多国语言版?br />q个版本由cnpack目l的成员q行了汉化,q添加了许多实用的工兗具体的内容可以参考其中文|站?br />下蝲地址Q?a target="_blank" rel="nofollow">http://www.cnvcl.org
3、ViewCVS
ViewCVS是一个用Python语言~写的CVS Web界面。有了它Q你可以通过览器查阅源代码Q进行版本比较。相对于CVSTracNT自带的Web界面来说QViewCVS更加有亲和力Q功能也比较完善。大名鼎鼎的SourceForge的Web界面是使用ViewCVS搭徏的?br />q有另外一个CVS的Web界面CVSWebQ用Perl语言开发?br />选用版本Q?.0 dev r6?br />最新的版本Q没什么好说的?br />下蝲地址Q?a target="_blank" rel="nofollow">http://russ.hn.org/viewcvs/
4、Python
让ViewCVSq行hQ必不可的是Python?br />选用版本Q?.4.1。其?.4.x版本应该也可以,但注意和ViewCVS的版本要搭配?br />下蝲地址Q?a target="_blank" rel="nofollow">http://www.python.org
5、PyWin32
Python语言的Win32扩展?br />选用版本Q?.04 for Py 2.4?br />下蝲地址Q?a target="_blank" rel="nofollow">http://pywin32.sourceforge.net
6、Apache HTTP Server
ViewCVS可以在IIS和Apache服务器上q行Q考虑再三Q最后选择的Apache。虽焉|v来有些麻烦(其实也不ȝQ,但考虑到Apache是开源项目,不会有法律问题,呵呵?br />选用版本Q?.0.54?br />下蝲地址Q?a target="_blank" rel="nofollow">http://apache.justdn.org/
7、MySQL
ViewCVS提供了查询功能,使用的是MySQL数据库?br />选用版本Q?.23.42-nt?br />不要使用4.x版本的MySQLQ与ViewCVS兼容不太好?br />
二、安?br />1、安装CVSNT
直接q行CVSNT安装包。安装结束后Q打开Service Control PanelQ配|你的CVS仓库。点击Repositories选项,d你的仓库地址可以了Q不需要重新启动CVS服务器?br />
2、安装CVSTracNT
直接q行CVSTracNT安装包。感谢CNPack的程序员Q如果按照CVSTracNT|页上的安装介绍Q一定会郁闷歅R安装结束后q行CVSTrac配置E序Q程序启动后会自动搜索CVS仓库Q将其添加到CVSTrac数据库。选中数据库,点击览按钮Q你的浏览器应该打开q显CCVSTrac的页面了?br />CVSTracNT的用及配置参?a target="_blank" rel="nofollow">http://www.cnpack.org上的介绍?br />
3、安装Python及PyWin32
q行安装包即可?br />
4、安装Apache HTTP Server
q行安装包即可。如果在安装q程中没有选择让Apache自动q行Q那么可以通过开始菜单运行Apache?br />
5、安装MySQL
q行安装包即可?br />
6、安装ViewCVS
最ȝ的地方到了?br />首先Q将ViewCVS解压~到一个目录中Q然后在该目录的命o行中Q运行python viewcvs-install。安装结束后Q编辑viewcvs.conf文gQ修改cvs_rootsؓ你的CVS仓库路径Q修改default_rootؓ默认的CVS仓库Q还可以修改邮g地址V?br />然后拯web\cvs\viewcvs.cgiC的Apache cgi-bin目录中?br />q行ApacheQ在览器中输入http://localhost/cgi-bin/viewcvs.cgiQ看看你的ViewCVS是不是运行顺利?
现在我们要ؓViewCVSd查询功能了?br />q行MySQL的管理程序mysqlQ进入MySQL命o行模式,d一个用户viewcvsQƈ赋予其读写的权力。退出。在命o行下q行python cvsbdadmin CREATEQ根据提C入数据库名,用户名和密码Q数据库自动创徏?br />~辑viewcvs.conf文gQ修改cvsdb块下的enabled选项gؓ1Q去除后面各前的注释符Q修改各的gؓ前面讄的倹{?br />拯web\cgi\query.cgi到Apache cgi-bin目录下?br />在浏览器中运?a href="http://localhost/cgi-bin/query.cgi" target="_blank" rel="nofollow">http://localhost/cgi-bin/query.cgiQ看看结果…?br />p|了,pȝ提示Python错误。根据错误信息查刎ͼ错误处在dbi.py文g中。在dbi.py中有q样一行:datetime.tuple()。查阅Python文档Q发现datetime对象没有tupleҎQ只有timetupleҎQ更改之后,q行正常?br />
三、ȝ
以上的搭配方案适用于中项目组Q因为CVSNT本n在应对大目时有一些效率问题。如果你想用CVS理上万个源文gQ那么用Linuxq_搭徏CVS服务器是更合适的选择?br />无论如何QCVSTracNT都是你不该错q的好东西,当项目逐渐膨胀h后,让CVSTracNT来管理一些机械的事情是一个好选择?br />ViewCVSq不是必要的Q但是比之CVSTracNT自带的Web界面QViewCVS要更舒服一些,某些功能也更清晰Q比如版本比较)。让你的上通过ViewCVS来浏览你的工作情况也许是个好选择Q你不需要在Trac中ؓ他保留一个会Cؕ正常工作E序的位|?br />d来说ViewCVS的查询功能ƈ不是太方便,使用h比较J琐Q结论是不用也Ş。安装MySQL{等的繁琐工作也׃需要了?br />我最遗憾的是Q因为时间的关系Qƈ没有建立SSLq接方式。从安全的角度来_SSL也许是必不可的Q除非你的访问者都值得信Q?br />最后还要说的是QCVS虽然比较行Q但q不是源代码理的唯一选择。在你作出决定之前,不妨先看看这文章:http://better-scm.berlios.de/comparison/comparison.html?br />
]]>
关键词:CVS CVSWeb CVSTrac WinCVS CVSROOT
内容摘要Q?
CVS是一个C/SpȝQ多个开发h员通过一个中心版本控制系l来记录文g版本Q从而达C证文件同步的目的。工作模式如下:
CVS服务器(文g版本库)
/ | \
Q版 ??步)
/ | \
开发? 开发? 开发?
作ؓ一般开发h员挑?,6看就可以了,CVS的管理员则更需要懂的更多一些,最后还单介l了一些Windows下的cvs客户端用,CVSq程用户认证的选择及与BUG跟踪pȝ{开发环境的集成问题?/p>
一个系l?0%的功能往往能够满80%的需求,CVS也不例外Q以下是CVS最常用的功能,可能q不到它全部命o选项?0%Q作Z般开发h员^时会用cvs update和cvs commit够了,更多的需求在实际应用q程中自然会出现Q不时回头看看相x档经常有意外的收莗?/p>
tcsh
setenv CVSROOT /path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export CVSROOT
后面q提到远ECVS服务器的讄Q?br />CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
初始化:CVS版本库的初始化?br />cvs init
一个项目的首次导入
cvs import -m "write some comments here" project_name vendor_tag release_tag
执行后:会将所有源文g及目录导入到/path/to/cvsroot/project_name目录?br />vender_tag: 开发商标记
release_tag: 版本发布标记
目导出Q将代码从CVS库里导出
cvs checkout project_name
cvs 创建project_name目录Qƈ最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念,相对于Virvual SourceSafe的check out是cvs updateQ?check in是cvs commit?/i>
注意Q第一ơ导Z后,׃是通过cvs checkout来同步文件了Q而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步Q添加,修改Q删除)操作?/b>
文件同步到最新的版本
cvs update
不制定文件名Qcvs同步所有子目录下的文gQ也可以制定某个文g?目录q行同步
cvs update file_name
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一ơ,q养成“先同步 后修改”的习惯Q和Virvual SourceSafe不同QCVS里没有文仉定的概念Q所有的冲突是在commit之前解决Q如果你修改q程中,有其他h修改qcommitCCVS 库中QCVS会通知你文件冲H,q自动将冲突部分?br />>>>>>>
content on cvs server
<<<<<<
content in your file
>>>>>>
标记出来Q由你确认冲H内容的取舍?br />版本冲突一般是在多个h修改一个文仉成的,但这U项目管理上的问题不应该指望由CVS来解冟?/i>
认修改写入到CVS库里
cvs commit -m "write some comments here" file_name
注意QCVS的很多动作都是通过cvs commitq行最后确认ƈ修改的,最好每ơ只修改一个文件。在认的前Q还需要用户填写修Ҏ释,以帮助其他开发h员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话Qcvs会自动调用系l缺省的文字~辑?一般是vi)要求你写入注释?br />注释的质量很重要Q所以不仅必要写,而且必须写一些比较有意义的内容:以方便其他开发h员能够很好的理解
不好的注释,很难让其他的开发h员快速的理解Q比如: -m "bug fixed" 甚至 -m ""
好的注释Q甚臛_以用中文: -m "在用h册过E中加入了Email地址校验"
修改某个版本注释Q每ơ只认一个文件到CVS库里是一个很好的习惯Q但隑օ有时候忘了指定文件名Q把多个文g以同h释commit到CVS库里了,以下命o可以允许你修Ҏ个文件某个版本的注释Q?br />cvs admin -m 1.3:"write some comments here" file_name
d文g
创徏好新文g后,比如Qtouch new_file
cvs add new_file
注意Q对于图片,Word文档{非U文本的目Q需要用cvs add -kb选项?q制文g方式导入(k表示扩展选项Qb表示binary)Q否则有可能出现文g被破坏的情况
比如Q?br />cvs add -kb new_file.gif
cvs add -kb readme.doc
如果关键词替换属性在首次导入时设|错了怎么办?
cvs admin -kkv new_file.css
然后认修改q注?/span>
cvs ci -m "write some comments here"
删除文g
某个源文g物理删除后,比如Qrm file_name
cvs rm file_name
然后认修改q注?br />cvs ci -m "write some comments here"
以上面前2步合q的Ҏ为:
cvs rm -f file_name
cvs ci -m "why delete file"
注意Q很多cvs命o都有~写形式Qcommit=>ci; update=>up; checkout=>co/get; remove=>rm;
d目录
cvs add dir_name
查看修改历史
cvs log file_name
cvs history file_name
查看当前文g不同版本的区?/u>
cvs diff -r1.3 -r1.5 file_name
查看当前文gQ可能已l修改了Q和库中相应文g的区?br />cvs diff file_name
cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法,具体安装讄L后面的cvsweb使用
正确的通过CVS恢复旧版本的ҎQ?br />如果用cvs update -r1.2 file.name
q个命o是给file.name加一个STICK TAGQ?"1.2" Q虽然你的本意只是想它恢复?.2版本
正确的恢复版本的Ҏ是:cvs update -p -r1.2 file_name >file_name
如果不小心已l加成STICK TAG的话Q用cvs update -A 解决
Ud文g/文g重命?/u>
cvs里没有cvs move或cvs renameQ因两个操作是可以由先cvs remove old_file_nameQ然后cvs add new_file_name实现的?/p>
删除/Ud目录
最方便的方法是让管理员直接UdQ删除CVSROOT里相应目录(因ؓCVS一个项目下的子目录都是独立的,Ud?CVSROOT目录下都可以作ؓ新的独立目Q好比一颗树Q其实砍下Q意一枝都能独立存z)Q对目录q行了修改后Q要求其开发h员重新导出项目cvs checkout project_name 或者用cvs update -dP同步?/p>
目发布导出不带CVS目录的源文g
做开发的时候你可能注意CQ每个开发目录下QCVS都创Z一个CVS/目录。里面有文g用于记录当前目录和CVS库之间的对应信息。但目发布的时候你一般不希望把文件目录还带着含有CVS信息的CVS目录吧,q个一ơ性的导出q程使用cvs export命oQ不qexport只能针对一个TAG或者日期导出,比如Q?br />cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name
cvs tag release_1_0
开始一个新的里E碑Q?br />cvs commit -r 2 标记所有文件开始进?.x的开?/p>
注意QCVS里的revsion和Y件包的发布版本可以没有直接的关系。但所有文件用和发布版本一致的版本h较有助于l护?/i>
版本分支的徏?/u>
在开发项目的2.x版本的时候发?.x有问题,?.x又不敢用Q则从先前标记的里程:release_1_0导出一个分?release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir
一些h先在另外一个目录下导出release_1_0_patchq个分支Q解?.0中的紧急问题,
cvs checkout -r release_1_0_patch
而其他h员仍旧在目的主q分?.x上开?/p>
在release_1_0_patch上修正错误后Q标C?.0的错误修正版本号
cvs tag release_1_0_patch_1
如果2.0认ؓq些错误修改?.0里也需要,也可以在2.0的开发目录下合ƈrelease_1_0_patch_1中的修改到当前代码中Q?br />cvs update -j release_1_0_patch_1
常见的登陆格式如下:
cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login
例子Q?br />cvs -d :pserver:cvs@samba.org:/cvsroot login
不是很安全,因此一般是作ؓ匿名只读CVS讉K的方式。从安全考虑Q通过pȝ本地帐号认证q过SSH传输是比较好的办法,通过在客h?/etc/profile里设|一下内容:
CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客h所有本地用户都可以映射到CVS服务器相应同名帐号了?/p>
比如:
CVS服务器是192.168.0.3Q上面CVSROOT路径?home/cvsrootQ另外一台开发客h?92.168.0.4Q如?tom?台机器上都有同名的帐P那么?92.168.0.4上设|了Q?br />export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot
export CVS_RSH=ssh
tom可以直接在192.168.0.4上对192.168.0.3的cvsrootq行讉K了(如果有权限的话)
cvs checkout project_name
cd project_name
cvs update
...
cvs commit
如果CVS所在服务器的SSH端口不在~省?2Q或者和客户端与CVS服务器端SSH~省端口不一_有时候设|了Q?br />:ext:$USER@test.server.address#port:/path/to/cvsroot
仍然不行Q比如有以下错误信息Q?br />ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)
解决的方法是做一个脚本指定端口{向(不能使用aliasQ会出找不到文g错误Q:
创徏一?usr/bin/ssh_cvs文gQ假设远E服务器的SSH端口是非~省端口Q?4567
#!/bin/sh
/usr/bin/ssh -p 34567 "$@"
然后Qchmod +x /usr/bin/ssh_cvs
qCVS_RSH=ssh_cvs; export CVS_RSH
注意Qport是指相应服务器SSH的端口,不是指cvs专用的pserver的端?br />
使用的样例可以看Q?a >http://www.freebsd.org/cgi/cvsweb.cgi
CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,q个是我个h感觉安装讄比较方便的:
原先在:http://www.spaghetti-code.de/software/linux/cvsweb/Q但目前已经删除Q?a >目前仍可以在本站下蝲CVSWEBQ其实最q?q?a >FreeBSD的CVSWeb目已经有了更好的发展吧Q而当初没有用FreeBSD那个版本主要是因ؓ没有彩色的文件Diff功能?
下蝲解包Q?br />tar zxf cvsweb.tgz
把配|文件cvsweb.conf攑ֈ安全的地方(比如和apache的配|放在同一个目录下Q,
修改Qcvsweb.cgi让CGI扑ֈ配置文gQ?br />$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';
转到/path/to/apache/conf下ƈ修改cvsweb.confQ?/p>
CVSWEB可不能随便开攄所有用P因此需要用WEB用户认证Q?br />先生?passwd:
/path/to/apache/bin/htpasswd -c cvsweb.passwd user
修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>
几个常用的缺省文Ӟ
default.php
<?php
/*
* Copyright (c) 2002 Company Name.
* $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
*/
?>
====================================
Default.java: 注意文g头一般注释用 /* 开?JAVADOC注释?/** 开始的区别
/*
* Copyright (c) 2002 MyCompany Name.
* $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
*/
package com.mycompany;
import java.;
/**
* comments here
*/
public class Default {
/**
* Comments here
* @param
* @return
*/
public toString() {
}
}
====================================
default.pl:
#!/usr/bin/perl -w
# Copyright (c) 2002 Company Name.
# $Header: /home/cvsroot/tech/cvs_card.html,v 1.9 2003/11/09 07:57:11 chedong Exp $
# file comments here
use strict;
CVS没有文g锁定模式QVSS在check out同时Q同时记录了文g被导锁定?
CVS的update和commitQ?VSS是get_lastest_version和check in
对应VSS的check out/undo check out的CVS里是edit和unedit
在CVS中,标记自动更新功能~省是打开的,q样也带来一个潜在的问题Q就是不?kb方式dbinary文g的话在cvs自动更新时可能会D文g失效?/p>
$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $ $Date: 2003/11/09 07:57:11 $q样的标记在Virsual SourceSafe中称之ؓKeyword ExplainationQ缺省是关闭的,需要通过OPITION打开Qƈ指定需要进行源文g关键词扫描的文gcdQ?.txt,*.java, *.html...
对于Virsual SourceSafe和CVS都通用的TAG有:
$Header: /home/cvsroot/tech/cvs_card.html,v 1.5 2003/03/09 08:41:46 chedong Exp $
$Author: chedong $
$Date: 2003/11/09 07:57:11 $
$Revision: 1.9 $
我徏议尽量用通用的关键词保证代码在CVS和VSS都能方便的跟t?
cvs Windows客户端:目前E_版本?.2
http://cvsgui.sourceforge.net
ssh Windows客户?br />http://www.networksimplicity.com/openssh/
安装好以?个Y件以后:
WinCVS客户端的admin==>preference讄
1 在general选单?br />讄CVSROOTQ?username@192.168.0.123:/home/cvsroot
讄Authorization: 选择SSH server
2 Port选单?br />钩上Qcheck for alternate rsh name
q设|ssh.exe的\径,~省是装?C:\Program Files\NetworkSimplicity\ssh\ssh.exe
然后可以用WinCVSq行cvs操作了,所有操作都会蟩出命令行H口要求你输入服务器端的认证密码?
当然Q如果你觉得q样很烦的话Q还有一个办法就是生成一个没有密码的公钥/U钥对,q设|CVS使用Z公钥/U钥的SSH认证Q在general 选单里)?/p>
可以选择的diff工具Qexamdiff
下蝲Q?br />http://www.prestosoft.com/examdiff/examdiff.htm
q是在WinCVS菜单admin==>preference的WinCVS选单?br />选上QExternel diff program
q设|diff工具的\径,比如QC:\Program Files\ed16i\ExamDiff.exe
在对文gq行版本diffӞW一ơ需要将H口右下角的use externel diff选上?
q里首先说一下CVS的pserver模式下的用户认证QCVS的用戯证服务是Zinetd中的Q?br />cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
一般在2401端口Q这个端口号很好讎ͼ49的^方)
CVS用户数据库是ZCVSROOT/passwd文gQ文件格式:
[username]:[crypt_password]:[mapping_system_user]
׃密码都用的是UNIX标准的CRYPT加密Q这个passwd文g的格式基本上是apache的htpasswd格式的扩展(比APACHE?PASSWD文g多一个系l用h字D)Q所以这个文件最单的Ҏ可以?br />apache/bin/htpasswd -b myname mypassword
创徏。注意:通过htpasswd创徏出来的文件会没有映射pȝ用户的字D?br />例如Q?br />new:geBvosup/zKl2
setup:aISQuNAAoY3qw
test:hwEpz/BX.rEDU
映射pȝ用户的目的在于:你可以创Z个专门的CVS服务帐号Q比如用apache的运行用户apacheQƈ?home/cvsroot目录下的所有权限赋予这个用P然后在passwd文g里创Z同的开发用户帐P但开发用户帐h后的文gd权限都映ؓapache用户Q在SSH模式下多个系l开发用户需要在同一个组中才可以怺dCVS库中的文件?/p>
q一步的Q你可以用户分别映到apacheq个pȝ用户上?br />new:geBvosup/zKl2:apache
setup:aISQuNAAoY3qw:apache
test:hwEpz/BX.rEDU:apache
CVSTrac很好的解决了CVSROOT/passwd的管理问题,而且包含了BUG跟踪报告pȝ和集成WIKIWIKI交流功能{,使用?CGI方式的安装,q且ZGNU Public LicenseQ?br />
在inetd里加入cvspserver服务Q?br />cvspserver stream tcp nowait apache /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
xietd的配|文Ӟ%cat cvspserver
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = apache
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_failure += USERID
}
注意Q这里的用户讄成apache目的是和/home/cvsroot的所有用户一_q且必须让这个这个用户对/home/cvsroot/下的 CVSROOT/passwd和cvstrac初始化生成的myproj.db有读取权限?/p>
安装q程
修改d密码Q进行BUG报告{,
更多使用l节可以在用中慢慢了解?br />
对于前面提到的WinCVS在perference里设|:
CVSROOT栏输入:username@ip.address.of.cvs:/home/cvsroot
Authenitication选择Quse passwd file on server side
可以了从服务器上进行CVS操作了?br />
CVS的权限管理分2U策略:
Linux上通过sshq接CVS服务器的多个开发h员:通过都属于apachel实现文件的׃nd
开发h员有开发服务器上的pȝ帐号Qsysuser1 sysuser2Q设|让他们都属于apachel,因ؓ通过cvs新导入的目都是对组开攄Q?64权限的,q样无论那个pȝ用户导入的项目文Ӟ只要文g的组宿主是apacheQ所有其他同l系l开发用户就都可以读写;Zsshq程认证的也是一栗?br />
apache(system group)
/ | \
sysuser1 sysuser2 sysuser3
Windows上通过cvspserverq接CVS服务器的多个开发h员:通过在passwd文gU映成 apache用户实现文g的共享读?br />他们的帐号通过CVSROOT/passwd和readers writersq几个文件管理;通过cvstrac讄所有虚拟用户都映射到apache用户上即可?br />
apache(system user)
/ | \
windev1 windev2 windev3
利用CVS WinCVS/CVSWeb/CVSTrac 构成了一个相对完善的跨^台工作组开发版本控制环境?/p>
相关资源Q?
CVS HOMEQ?br />http://www.cvshome.org
CVS FAQQ?br />http://www.loria.fr/~molli/cvs-index.html
相关|站:
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/
CVS--q行版本pȝ
http://www.soforge.com/cvsdoc/zh_CN/book1.html
CVS 免费?
http://cvsbook.red-bean.com/
CVS命o的速查卡片 refcards.com/refcards/cvs/
WinCVS:
http://cvsgui.sourceforge.net/
CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS
http://www.cvstrac.org
StatCVSQ基于CVS的代码统计工P按代码量Q按开发者的l计表等
http://sourceforge.net/projects/statcvs
原文出处Q?lt;a >http://www.chedong.com/tech/cvs_card.html</a>
有些高用户Ҏ都没有办法,其实只需要在q行处,输入 shutdown –a 卛_取消该窗体。如果系l找不到 shutdown 指oQ那么还需要你自己到机器上赶紧Q然后执行该指o?/span>
另外Q借此介绍一下?/span> windowsXP 操作pȝ用户讄自动xd的方法。先声明一点,如果长时间不使用计算机,pȝ׃q入盘关闭状态,本计划Q务可能无法执行?/span>
q入控制面板Q?/span> >
q入d计划Q?/span> >
新徏dQ命?/span> shutdown 或者其他你希望的名U?/span>
如图Q?/span>
C:\WINDOWS\system32\shutdown.exe -s -t 300 -c "
每小时定期执?/span>
" -f
q样Q自 21 Q?/span> 50 开始,每个时Q系l会自动执行一ơ自动关机等待。直C输入q行 shutdown –a 来取消该自动xq程?/span>
我们的这个例子中Q设定了 300 U的xq程Q就是说从弹出窗体开始, 300 U之后,pȝ自动xQ我们可以设定成L的时间段Q徏议不要太长,也不要太短?/span>
Windows XP
的关机是?/span>
Shutdown.exe
E序来控制的Q位?/span>
Windows\System32
文g夹中。如果想?/span>
Windows 2000
也实现同L效果Q可以把
Shutdown.exe
复制到系l目?/span>
System32
下?/span>
附:
ShutDown
用法及参?/span>
用法
: shutdown [-i | -l | -s | -r | -a] [-f] [-m \\computername] [-t xx] [-c "comment"] [-d up:xx:yy]
没有参数
昄此消?/span>
(
?/span>
?
相同
)
-i
昄
GUI
界面Q必LW一个选项
-l
注销
(
不能与选项
-m
一起?/span>
)
-s
关闭此计机
-r
关闭q启动此计机
-a
攑ּpȝx
-m \\computername
q程计算机关?/span>
/
重启?/span>
/
攑ּ
-t xx
讄关闭的超时ؓ
xx
U?/span>
-c "comment"
关闭注释
(
最?/span>
127
个字W?/span>
)
-f
强制q行的应用程序关闭而没有警?/span>
-d [p]:xx:yy
关闭原因代码
u
是用户代?/span>
p
是一个计划的关闭代码
xx
是一个主要原因代?/span>
(
于
256
的正整数
)
yy
是一个次要原因代?/span>
(
于
65536
的正整数
)
-f
Q强行关闭应用程?/span>
-m \\
计算机名Q控制远E计机
-i
Q显C图形用L面,但必L
Shutdown
的第一个选项
-l
Q注销当前用户
-r
Q关机ƈ重启
-t
旉Q设|关机倒计?/span>
-c "
消息内容
"
Q输入关机对话框中的消息内容
(
不能?/span>
127
个字W?/span>
)