📄 1494.html
字号:
<br>
CVS Branch:项目多分支同步开发<br>
=============================<br>
<br>
确认版本里程碑:多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础。<br>
cvs tag release_1_0<br>
<br>
开始一个新的里程碑:<br>
cvs commit -r 2 标记所有文件开始进入2.x的开发<br>
<br>
注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。<br>
<br>
版本分支的建立<br>
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_patch<br>
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir<br>
<br>
一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题,<br>
cvs checkout -r release_1_0_patch<br>
而其他人员仍旧在项目的主干分支2.x上开发<br>
<br>
在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号<br>
cvs tag release_1_0_patch_1<br>
<br>
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:<br>
cvs update -j release_1_0_patch_1<br>
<br>
CVS的远程认证:通过SSH远程访问CVS<br>
================================<br>
<br>
使用cvs本身基于pserver的远程认证很麻烦,需要定义服务器和用户组,用户名,设置密码等,<br>
常见的登陆格式如下:<br>
cvs -d :pserver:cvs_user_name@cvs.server.address:/path/to/cvsroot login<br>
例子:<br>
cvs -d :pserver:cvs@samba.org:/cvsroot login<br>
<br>
不是很安全,因此一般是作为匿名只读CVS访问的方式。从安全考虑,通过系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的/etc/profile里设置一下内容:<br>
CVSROOT=:ext:$USER@cvs.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH<br>
所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。<br>
<br>
比如:<br>
<br>
CVS服务器是192.168.0.3,上面CVSROOT路径是/home/cvsroot,另外一台开发客户机是192.168.0.4,如果tom在2台机器上都有同名的帐号,那么从192.168.0.4上设置了:<br>
export CVSROOT=:ext:tom@192.168.0.3:/home/cvsroot<br>
export CVS_RSH=ssh<br>
tom就可以直接在192.168.0.4上对192.168.0.3的cvsroot进行访问了(如果有权限的话)<br>
cvs checkout project_name<br>
cd project_name<br>
cvs update<br>
...<br>
cvs commit <br>
<br>
<br>
如果CVS所在服务器的SSH端口不在缺省的22,或者和客户端与CVS服务器端SSH缺省端口不一致,有时候设置了:<br>
:ext:$USER@test.server.address#port:/path/to/cvsroot <br>
<br>
仍然不行,比如有以下错误信息:<br>
ssh: test.server.address#port: Name or service not known<br>
cvs [checkout aborted]: end of file from server (consult above messages if any)<br>
<br>
解决的方法是做一个脚本指定端口转向(不能使用alias,会出找不到文件错误):<br>
创建一个/usr/bin/ssh_cvs文件:<br>
#!/usr/bin/sh<br>
/path/to/ssh -p 34567 "$@"<br>
然后:chmod +x /usr/bin/ssh_cvs<br>
并CVS_RSH=ssh_cvs; export CVS_RSH<br>
<br>
注意:port是指相应服务器SSH的端口,不是cvs pserver的端口<br>
<br>
CVSWEB:提高文件浏览效率<br>
=======================<br>
<br>
CVSWEB就是CVS的WEB界面,可以大大提高程序员定位修改的效率:<br>
使用的样例可以看:http://www.freebsd.org/cgi/cvsweb.cgi<br>
<br>
CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是我个人感觉安装设置比较方便的:<br>
http://www.spaghetti-code.de/software/linux/cvsweb/<br>
<br>
下载解包:<br>
tar zxf cvsweb.tgz<br>
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一个目录下),<br>
修改:cvsweb.cgi让CGI找到配置文件:<br>
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';<br>
<br>
转到/path/to/apache/conf下并修改cvsweb.conf:<br>
<br>
修改CVSROOT路径设置:<br>
%CVSROOT = (<br>
'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT<br>
); <br>
缺省不显示已经删除的文档:<br>
"hideattic" => "1",#<==缺省不显示已经删除的文档 <br>
在配置文件cvsweb.conf中还可以定制页头的描述信息,你可以修改$long_intro成你需要的文字 <br>
CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证:<br>
先生成 passwd:<br>
/path/to/apache/bin/htpasswd -c cvsweb.passwd user<br>
<br>
修改httpd.conf: 增加<br>
<Directory "/path/to/apache/cgi-bin/cvsweb/"><br>
AuthName "CVS Authorization"<br>
AuthType Basic<br>
AuthUserFile /path/to/cvsweb.passwd<br>
require valid-user<br>
</Directory><br>
<br>
CVS TAGS: who? when?<br>
====================<br>
<br>
将 $Id$ 加在程序文件开头的注释里是一个很好的习惯,cvs能够自动解释更新其中的内容成: file_name version time user_name 的格式,比如:cvs_card.txt, v 1.1 2002/04/05 04:24:12 chedong Exp,可以这些信息了解文件的最后修改人和修改时间<br>
<br>
<br>
<br>
几个常用的缺省文件:<br>
default.php<br>
<?php<br>
/*<br>
* Copyright (c) 2002 Company Name.<br>
* $Header$<br>
*/<br>
<br>
?><br>
====================================<br>
Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别<br>
/*<br>
* Copyright (c) 2002 MyCompany Name.<br>
* $Header$<br>
*/<br>
<br>
package com.mycompany;<br>
<br>
import java.;<br>
<br>
/**<br>
* comments here<br>
*/<br>
public class Default {<br>
/**<br>
* Comments here<br>
* @param<br>
* @return<br>
*/<br>
public toString() {<br>
<br>
}<br>
}<br>
====================================<br>
default.pl:<br>
#!/usr/bin/perl -w<br>
# Copyright (c) 2002 Company Name.<br>
# $Header$<br>
<br>
# file comments here<br>
<br>
use strict;<br>
<br>
<br>
CVS vs VSS <br>
=========== <br>
<br>
CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。 <br>
<br>
CVS的update和commit, VSS是get_lastest_version和check in <br>
<br>
对应VSS的check out/undo check out的CVS里是edit和unedit <br>
<br>
在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。 <br>
<br>
$Header $ $Date$这样的标记在Virsual SourceSafe中称之为Keyword Explaination,缺省是关闭的,需要通过 OPITION打开,并指定需要进行源文件关键词扫描的文件类型:*.txt,*.java,*.html... <br>
<br>
对于Virsual SourceSafe和CVS都通用的TAG有:<br>
$Header$<br>
$Author$<br>
$Date$ <br>
$Revision$ <br>
<br>
我建议尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。 <br>
<br>
WinCVS<br>
====== <br>
<br>
下载:<br>
cvs Windows客户端:目前稳定版本为1.2<br>
http://www.wincvs.org/<br>
ssh Windows客户端<br>
http://www.networksimplicity.com/openssh/<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -