| Julia's profile美丽日子PhotosBlogLists | Help |
CVS的常用命令概述:CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。
CVS服务器(文件版本库) 以下是本文主要内容:开发人员可以主要挑选2, 6看就可以了,CVS的管理员则更需要懂的更多一些
一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。
环境设置:指定CVS库的路径CVSROOT 后面还提到远程CVS服务器的设置: 一个项目的首次导入 项目导出:将代码从CVS库里导出 注意:第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。 将文件同步到最新的版本: 确认修改写入到CVS库里: 注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。 删除文件: 注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;
正确的通过CVS恢复旧版本的方法: 移动文件:文件重命名 删除,移动目录: CVS Branch:项目多分支同步开发 确认版本里程碑:多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础。 开始一个新的里程碑: 注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。 在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_patch 一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题, 在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号 如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中: CVS的远程认证:通过SSH远程访问CVS 使用cvs本身的远程认证很麻烦,需要定义服务器和用户组,用户名,设置密码等,而且不安全,因此和系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的/etc/profile里设置一下内容: 注意:port是指相应服务器SSH的端口,不是cvs pserver的端口 CVSWEB就是CVS的WEB界面,可以大大提高程序员定位修改的效率: CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是个人感觉觉得安装设置比较方便的:
CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证: 将$Id$ 加在程序文件开头的注释里是一个很好的习惯,cvs能够自动解释更新其中的内容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以这些信息了解文件的最后修改人和修改时间 ==================================== ==================================== CVS vs VSS CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。 CVS是update commit, VSS是check out check in 在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。 Virsual SourceSafe中这个功能称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的类型:*.txt,*.java,*.html... 对于Virsual SourceSafe和CVS都通用的TAG有: 尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。
相关资源: CVS HOME: CVS FAQ: CVS 免费书: CVS 命令的速查卡片:
PowerDesigner教程五 概念数据模型目标: 本文主要介绍数据项、新增数据项、数据项的唯一性代码选项和重用选项等。 一、数据项 数据项(Data Item)是信息存储的最小单位,它可以附加在实体上作为实体的属性。 注意:模型中允许存在没有附加至任何实体上的数据项。 二、新建数据项 1)使用“Model”---> Data Items 菜单,在打开的窗口中显示已有的数据项的列表,点击 “Add a Row”按钮,创建一个新数据项,如图所示 ![]() 2)当然您可以继续设置具体数据项的Code、DataType、Length等等信息。这里就不再详细说明了。 三、数据项的唯一性代码选项和重用选项 使用Tools--->Model Options->Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项(Allow Reuse)。 注意: 如果选择Unique Code复选框 ,每个数据项在同一个命名空间有唯一的代码,而选择Allow reuse ,一个数据项可以充当多个实体的属性。 ![]() 四、在实体中添加数据项 1)双击一个实体符号,打开该实体的属性窗口。 2)单击Attributes选项卡,打开如下图所示窗口 ![]() 注意: Add a DataItem 与 Reuse a DataItem的区别在于 Add a DataItem 情况下,选择一个已经存在的数据项,系统会自动复制所选择的数据项。如果您设置了UniqueCode选项,那系统在复制过程中,新数据项的Code会自动生成一个唯一的号码,否则与所选择的数据项完全一致。 Reuse a DataItem情况下,只引用不新增,就是引用那些已经存在的数据项,作为新实体的数据项。 PowerDesigner教程四 概念数据模型目标: 3)选择"Attributes"选项卡,再点击“Add Attributes”工具,弹出如图所示窗口,选择某个属性作为标识符就行了。 PowerDesigner教程三 概念数据模型目标: 本文主要介绍属性的标准检查约束、如何定义属性的附加检查。 一、定义属性的标准检查约束 标准检查约束是一组确保属性有效的表达式。在实体属性的特性窗口,打开如图所示的检查选项卡。 ![]() 在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下
二、定义属性的附加检查 当Standard checks 或Rules 不能满足检查的要求时,可以在Additional Checks选项卡的Server子页上,通过SQL语句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 几个变量来定义Standard和Rule,如图所示 ![]() %MINMAX%、%LISTVAL%、%UPPER%、%LOWER% 在Standard Check中定义的Minimum 和Maximum、List values 、uppervalues、lowervalues %RULES% 在Rules特性窗口Expression选项卡中定义的有效性规则表达式 PowerDesigner教程二 概念数据模型目标: 本文主要介绍PowerDesigner概念数据模型以及实体、属性创建。 一、新建概念数据模型 1)选择File-->New,弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型。 ![]() 2)完成概念数据模型的创建。以下图示,对当前的工作空间进行简单介绍。(以后再更详细说明) ![]() 3)选择新增的CDM模型,右击,在弹出的菜单中选择“Properties”属性项,弹出如图所示对话框。在“General”标签里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等等信息。在“Notes”标签里可以输入相关描述及说明信息。当然再有更多的标签,可以点击 "More>>"按钮,这里就不再进行详细解释。 ![]() 二、创建新实体 1)在CDM的图形窗口中,单击工具选项版上的Entity工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号。点击Pointer工具或右击鼠标,释放Entitiy工具。如图所示 ![]() 2)双击刚创建的实体符号,打开下列图标窗口,在此窗口“General”标签中可以输入实体的名称、代码、描述等信息。 ![]() 三、添加实体属性 1)在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示。 ![]() 注意: 数据项中的“添加属性”和“重用已有数据项”这两项功能与模型中Data Item的Unique code 和Allow reuse选项有关。 P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的,即该列是否为空值。 如果一个实体属性为强制的,那么, 这个属性在每条记录中都必须被赋值,不能为空。 2)在上图所示窗口中,点击插入属性按钮,弹出属性对话框,如下图所示。 注意:这里涉及到域的概念,即一种标准的数据结构,它可应用至数据项或实体的属性上。在以下的教程中将另立章节详细说明。 PowerDesigner教程一 概念数据模型一、概念数据模型概述
数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求: 1)能够比较真实地模拟现实世界 2)容易为人所理解 3)便于计算机实现 概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。
实体集(Entity Set)是具体相同类型及相同性质实体的集合。例如学校所有学生的集合可定义为“学生”实体集,“学生”实体集中的每个实体均具有学号、姓名、性别、出生年月、所在系别、入学年份等性质。 mysql中一些常用的操作1.添加管理员: 5.显示当前操作 6 备份和恢复 如果要备份某个数据库中某个表为 /usr/local/mysql/bin/mysqldump -uroot -p linux table > /root/linux.sql 7 查找某个表 show tables like '%table%'; 8 显示创建某个表的语句 show create table table_name; 9 导入本地文件到pet数据库中 LOAD DATA INFILE '/work/document/database/pet.txt' INTO TABLE pet; 10 清空表中数据保留字段truncate pet; 11 其他 select name,birth,curdate(), (year (curdate())-year(birth))-(right(curdate(),5)<right(birth,5)) as age from pet; 设计自己的Annotation入门与实践第一部分:了解一下java1.5起默认的三个annotation类型: 一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。 一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上. 一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭. 如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。 第二部分:讲一下annotation的概念先,再来讲一下怎样设计自己的annotation. 首先在jdk自带的java.lang.annotation包里,打开如下几个源文件: 1、源文件Target.java
其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字(会不会觉得sun有点吝啬,偏偏搞得与interface这么像). 2、源文件Retention.java
看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下. 在上面的文件都用到了RetentionPolicy,ElementType这两个字段,你可能就会猜到这是两个java文件.的确,这两个文件的源代码如下: 3、源文件RetentionPolicy.java 这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME. SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。 ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS. 第三个,是RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的. 举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的 Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被 Deprecated. 4、源文件ElementType.java
@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和 Annotation类型上. 另外,从1的源代码可以看出,@Target自己也用了自己来声明自己,只能用在ANNOTATION_TYPE之上. 如果一个Annotation类型没有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,这里的元素指的是上面的八种类型. 举几个正确的例子: @Target(ElementType.METHOD) @Target(value=ElementType.METHOD) @Target(ElementType.METHOD,ElementType.CONSTRUCTOR) 具体参考一下javadoc文档 上面一下1和2的源文件,它们都使用了@Documented,@Documented的目的就是让这一个Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息. 另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型. 第三部分:下面讲的设计一个最简单的Annotation例子,这一例子共用四个文件; 1、Description.java
说明:所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口. 最重要的一点,Annotation类型里面的参数该怎么设定: 第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型. 第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String. 第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:上面的例子就只有一个参数成员. 2、Name.java
3、JavaEyer.java
4、最后,写一个可以运行提取JavaEyer信息的类TestAnnotation
5、运行结果: 描述:javaeye,做最棒的软件开发交流社区 ----------------- 创始人:robbin 创建的社区:javaEye 创始人:江南白衣 创建的社区:springside 后续
如何控制一个annotation里的某些属性可以填可以不填,难道都是必填?
不是必填的,我举一个例子,可以更清楚一些,在把上面的Name.java改为 java 代码
|
|
|