Sun Studio 12:Fortran 编程指南

3.2 用 SCCS 进行版本跟踪和控制

SCCS 代表源代码控制系统 (Source Code Control System)。SCCS 为实现以下目标提供了途径:

SCCS 的三项基本操作是:

本部分以上一程序为例向您展示如何使用 SCCS 来执行这些任务。只对基本的 SCCS 进行了说明,并且只介绍了三个 SCCS 命令:createeditdelget

3.2.1 用 SCCS 控制文件

将文件置于 SCCS 控制下包括以下方面:

3.2.1.1 创建 SCCS 目录

首先,必须在正在开发程序的目录下创建 SCCS 子目录。使用以下命令:


demo% mkdir SCCS

SCCS 必须采用大写字母。

3.2.1.2 插入 SCCS ID 关键字

有些开发人员会在每个文件中放入一个或多个 SCCS ID 关键字,但这是可选的。以后,每次用 SCCS getdelget 命令签入文件时,都会用版本号来标识这些关键字。有三种可能的位置可以放置这些字符串:

使用关键字的优点是版本信息会出现在源列表和已编译的目标程序中。如果其前面有字符串 @(#),可用 what 命令打印目标文件中的关键字。

只含有参数和数据定义语句的已包含头文件不会生成任何初始化数据,因此这些文件的关键字通常置于注释或参数语句中。在某些文件中,如 ASCII 数据文件或 makefile,SCCS 信息将会出现在注释中。

SCCS 关键字以 %keyword% 形式出现,并通过 SCCS get 命令扩展成各自的值。最常用的关键字有:

%Z% 扩展为 what 命令识别的标识字符串 @(#)%M% 扩展为源文件名。%I% 扩展为本 SCCS 维护文件的版本号。%E% 扩展为当前日期。

例如,可以用包含以下关键字的 make 注释来标识 makefile。


#      %Z%%M%       %I%       %E%

源文件 startupcore.fcomputepts.fpattern.f 可以通过以下格式的初始化数据来标识:


      CHARACTER*50 SCCSID
      DATA SCCSID/"%Z%%M%       %I%       %E%\n"/

用 SCCS 处理该文件,进行编译,然后用 SCCS what 命令处理目标文件,显示如下:


demo% f95 -c pattern.f
...
demo% what pattern
pattern:
      pattern.f 1.2 96/06/10

您还可以创建名为 CTIMEPARAMETER,无论何时用 get 命令访问文件,该参数都会自动进行更新。


      CHARACTER*(*) CTIME
      PARAMETER ( CTIME="%E%")

INCLUDE 文件可以用含有 SCCS 标记的 Fortran 注释加以注解:


C       %Z%%M%       %I%       %E%

注 –

在 Fortran 95 源代码文件中使用单字母派生类型组件名可能会与 SCCS 关键字识别产生冲突。例如,当通过 SCCS 传递时,Fortran 95 结构组件引用 X%Y%Z 在执行 SCCS get 后会变成 XZ。在 Fortran 95 程序中使用 SCCS 时,应注意不要用单个字母定义结构组件。例如,假如 Fortran 95 程序中的结构引用是 X%YY%Z,SCCS 并不会将 %YY% 解释为关键字引用。或者,SCCS get -k 选项在检索文件时将不会扩展 SCCS 关键字 ID。


3.2.1.3 创建 SCCS 文件

现在,可以用 SCCS create 命令将这些文件置于 SCCS 控制之下:


demo% sccs create makefile commonblock startupcore.f \
  computepts.f pattern.f
demo%

3.2.2 签出和签入文件

一旦源代码处于 SCCS 控制之下,便可用 SCCS 执行以下两项主要任务:签出文件以便对其进行编辑;签入已编辑完的文件。

使用 sccs edit 命令签出文件。例如:


demo% sccs edit computepts.f

然后,SCCS 会在当前目录下创建 computepts.f 的可写副本,并记录您的登录名。当文件已签出时,其他用户不能再签出该文件,但可以查出是谁签出了该文件。

在您完成编辑后,使用 sccs delget 命令签入已修改的文件。例如:


demo% sccs delget computepts.f

该命令会使 SCCS 系统做以下事情:

sccs delget 命令是两个简单 SCCS 命令(deltaget)的复合命令。delta 命令执行上述列表中的前三项任务;get 命令执行后两项任务。