当前位置: 首页 > 工具软件 > Firefly > 使用案例 >

Firefly和CVS常见命令对比

柴意智
2023-12-01

任务

CVS命令

Firefly命令

新建存储库

cvs –d <source repository directory> init

hff rep create –h <hostname> –d <rep dir> <rep name>

FireflyCVS均支持多存储库。在cvs中用户需要使用 “cvs –f –allow-root=/rep1 –allow-root=/rep2 pserver”的模式来支持多存储库。在cvs中用户需要手工操作来加载/卸载存储库;Firefly使用mount/unmount命令来支持存储库的卸载和加载。

 

导入文件到存储库

cvs import <repository> “v-tag” “r-tag”

使用hff br import –h <hostname> -proj <project name> -b <branch name> -d <source path>命令向一个空分支中直接导入数据。

使用cvs import命令后,并不能在本地立即开始工作,还要cvs checkout命令以建立一个新的本地工作区来开始工作。在Firefly中,用户可以直接建立本地工作区,通过本地工作区来进行文件的添加。也可以使用import功能来向一个空的Branch中导入数据。(cvs import命令是用来弥补cvs add命令不支持递归的缺点的)

 

初始化本地工作区

cvs checkout <module name>

hff init –h <hostname> –proj <project name> –b <branch name>

Cvs使用checkout命令来初始化本地工作区。在checkout的同时,可以指定-d参数来进行存储库中module和本地目录的映射关系(目前Firefly缺少这一功能)。但是,如果用户使用-d参数的话,很容易使得本地工作区的目录和存储库中的不一致,为开发工作造成不必要的麻烦。在初始化过后的本地工作区中,cvs会在每个目录下生成一个“CVS”目录,用来记录相关信息。在Firefly中,只在本地工作区的根下生成一个.firefly目录,记录所有的本地工作区信息。

 

添加文件

cvs add <file list>

hff create <file list>

cvsadd命令不支持递归!如果用户要添加dir/file.txtcvs的存储库中,必须执行:1cvs add dir 2) cvs add dir/file.txt。如果dir目录下还有子目录,则需要依次递归执行add命令。当然,用户可以通过编写脚本的方式在一个命令中执行所有的操作,但是会严重影响执行速度。

CVS添加二进制文件需要进行特殊处理(使用-kb参数)。

http://developer.apple.com/documentation/DeveloperTools/cvs/cvs_75.html

Firefly能够自动判断文本文件和二进制文件。

 

编辑文件

cvs edit <file list>

hff edit <file list>

用户使用cvs也可以不通过edit命令而直接修改文件内容。Cvs是通过文件时间来判断文件是否修改,不保证其准确性。而Firefly记录在本地工作区中编辑的文件,并且可以使用”hff list-out”命令来查看已经处于编辑状态的文件。Firefly同时支持对Hijack文件的Submit

Firefly中,用户可以使用hff edit –v <version number>来确定编辑命令所执行的起始版本,在Submit时候,会在分支上产生一个最新版本,并不会产生新的文件分支。

 

撤销编辑

cvs unedit <file list>

hff unedit <file list>

用于撤销对文件的编辑,使文件恢复到编辑之前的状态。无大区别。

 

提交变更

cvs commit

hff submit

Cvs支持commit文件;Firefly支持Submit文件和ChangesetCvs在做commit时,需要遍历本地工作区所有的文件,通过文件时间的检查来判断应该commit哪些文件;而Firefly记录处于编辑状态下的文件,不需要检查本地工作区中的所有文件,即可得知需要Submit哪些文件。

 

更新本地工作区

cvs update

hff bringover

Cvs update命令需要使用-d参数才可以得到其它用户新建的目录(Module)。用户必须首先得知其它用户添加了哪些目录,然后使用cvs update –d cvs checkout命令才可以得到其它用户新建目录下的文件。在Firefly中,用户只使用bringover一个命令即可得到其它用户针对代码库的修改(包括更改的文件、移动的文件和新增的文件等等)。

 

下载文件

cvs export

hff download

cvs中,必须要指定一个tag才可以执行export命令,如果某一文件没有tag,可以使用-f参数要求使用最新版本(NOTE:这样做非常容易出错,因为export到本地的文件并不保证其一致性);在Firefly中,用户可以download某一个分支(开发代码线)的最新版本或是某一个标记(label),而无需新建tag

 

比较文件

cvs diff –r <rev1> -r <rev2> file name

hff diffs –v1 <rev1> -v2 <rev2> filename

比较文件版本之间的不同。

归并文件

 

cvs中如果在commit时有冲突的话,要求在update中解决。

Firefly中,如果在Submit时有冲突,要求在Bringover中解决。

缺省情况下,cvs使用简单的文本格式,要求用户手工解决冲突。在一些cvsGUI客户端程序中,允许用户定制第三方的归并工具。

 

Firefly本身提供3-way的归并工具。并且可以根据不同的文件类型设定不同的第三方归并工具。

查看文件信息

cvs status

hff info

hff list …

Firefly中,info命令可以查看其它用户对某一文件的编辑和锁定信息,而cvs不能的status命令不能产看该信息。另外,在Firefly中,提供了丰富的list命令(list-changes, list-deleted, list-out,…),而cvs不具备这些功能。Cvs用户如果需要得知本地工作区中都有哪些文件处于edit状态,需要编写脚本。

 

锁定文件/解锁文件

cvs admin –l <file list>

cvs admin –u <file list>

hff lock <file list>

hff unlock <file list>

cvs中,用户在edit的时候,并不提示其它用户已经锁定/编辑的信息。

Firefly中,用户可以通过lock命令锁定文件,也可以使用hff edit –lock命令锁定文件。(怀疑检查lock会影响cvsperformance

 

删除文件

cvs remove <file list>

hff delete <file list>

cvs中要删除一个文件,必须在本地工作区中先手工从硬盘上删除该文件,再执行cvs remove命令(或者使用cvs remove –f执行一步删除);在Firefly中,用户只需执行hff delete即可。在cvs中,如果要执行反删除操作,需要通过繁复的remove-add-update命令来完成(参考:http://www.cvsnt.org/manual/Removing-files.html),在Firefly中只需执行hff undelete即可。另外,在Firefly中,用户delete一个文件,再添加一个同名的新文件,系统认为这是两个不同的、独立的文件;而在cvs中则认为这是一个文件(由此可见,cvs在处理删除、反删除的操作时,只是给出了一个work around,并没有从根本上解决该问题)。

 
 类似资料: