get 命令

用途

创建指定版本的 SCCS 文件。

语法

要获取 SCCS 文件的只读版本,请输入:

获取 [ -g ] [ - ] [ -n ] [ -p ] [ -s ] [ -c 分界值 ] [ -我 列表 ] [ - SID ] [ -t ] [ -x 列表 ] [ -w 字符串 ] [ -我 [ P ] ] [ -L ] 文件 ...

要获取 SCCS 文件的可编辑版本,请输入:

获取 [ -e ] [ -k ] [ -b ] [ -s ] [ -c 分界值 ] [ -我 列表 ] [ - SID ] [ -t ] [ -x 列表 ] [ -我 [ P ] ] [ -L ] 文件 ...

描述

get 命令读取“源代码控制系统 (SCCS)”文件的指定版本,并根据指定的标志创建 ASCII 文本文件。 然后, get 命令将每个文本文件写入与原始 SCCS 文件同名但没有 的文件。 前缀 ( g-file)。

标志与文件可按任意顺序指定,所有标志应用于所有指定的文件。 如果为 File 参数指定目录,那么 get 命令对目录中以 s 开头的所有文件执行所请求的操作。 前缀。 如果指定了 -(减号)给 File 参数,那么 get 命令读取标准输入并将每行解释为 SCCS 文件名。 get 命令继续读取输入,直到它读到文件结束符。

如果有效用户在包含 SCCS 文件的目录下具有写权限,而实际用户却没有,那么当使用 -e 标志时只可以指定一个文件。

注: get 命令支持使用 w 标志指定的文件名和字符串数据的多字节字符集 (MBCS)。

获取只读文件版本

get 命令创建文件的只读版本和可编辑版本。 当应用程序不要求更改文件内容时则应使用文件的只读版本。 可编译源代码文件的只读版本。 文本文件可从只读版本显示或打印出来。

在使用标识关键字时可编辑版本与只读版本之间的区别是很重要的。 标识关键字是当 get 命令检索只读文件时扩展到一些文本值的符号。 在可编辑版本中,不扩展关键字。 标识关键字可出现在 SCCS 文件的任何位置。 有关标识关键字的更多信息,请参阅 prs 命令。

SCCS 文件

除了具有 的文件之外。 前缀 ( s-file) , get 命令创建多个辅助文件: g-filel-filep-file, 和 z-file。 这些文件由它们的标记(连字号前面的字母)标识。 get 程序通过替换前导 来命名辅助文件。 在 SCCS 文件名中使用相应的标记,但 g-file除外,后者通过除去 来命名。 前缀。 例如,名为 s.sample 的文件,辅助文件名应为 samplel.samplep.samplez.sample

这些文件服务于以下用途:

描述
s 文件 包含原文件文本以及所有对文件所作的更改(变化量)。 它还包括如下信息:谁能更改文件内容,谁进行了更改,什么时候进行的这些更改以及所作更改的本质。 因为是只读文件,所以不能直接编辑该文件。 然而,它包含 SCCS 命令构建您可编辑的 g 文件所需的信息。
g 文件 ASCII 文本文件,它包含用 -r 标志指定的 SCCS 文件版本(或标志缺省时为最新的干线版本)。 该文件可以直接编辑。 当完成了所有更改并要对文件进行新的更改时,那么在此文件上运行 delta 命令。 get 命令在当前目录创建 g 文件

它每次运行时,get 命令会创建一个 g 文件,除非指定了 -g 标志或 -p 标志。 实际用户拥有它(而非有效用户)。 如果不指定 -k-e 标志,那么文件为只读文件。 如果指定了 -k-e 标志,那么所有者具有 g 文件的写权限。 要创建 g 文件,必须在当前目录下具有写权限。

l 文件 当指定了 -l 标志时,get 命令创建 l 文件 l 文件是只读文件。 它包含显示生成 g 文件时应用的变化量的表。 要创建 l 文件,必须在当前目录下具有写权限。 l 文件中的行具有以下格式:
  • 如应用了变化量,那么为空格字符,否则为星号。
  • 如应用了变化量或不应用并忽略变化量时,为空格字符。 如不应用且不忽略变化量,那么出现星号。
  • 一个代码指示变化量应用与否的特殊原因:
    空白
    通常包含或排除
    i
    使用 -i 标志包含
    X
    使用 -x 标志排除
    C
    使用 -c 标志切断
  • SID。
  • 文件创建的日期与时间。
  • 变化量创建者的登录名。

注释与“修改请求 (MR)”数据跟在后续行之后,缩进一个水平制表符。 每个条目以空行结束。 例如,要用 -c 标志切断变化量,那么 l 文件中的条目可能为:

**C 1.3 85/03/13 12:44:16 pat

且初始变化量的条目可能为:

1.1 85/02/27 15:42:20 pat
date and time created 85/02/27 15:42:20 by pat
p 文件 当指定了 -e-k 标志时,get 命令会创建 p 文件p 文件get -e 命令生成的信息传递到 delta 命令。 p 文件还在运行 delta 命令或者将联合编辑键字母(j)设置在 SCCS 文件中之前防止对相同的 SID 执行后续的 get -e 命令。 j 键字母允许在同一 SID 上运行多个 get 命令。 p 文件创建于包含 SCCS File 的目录中。 要在 SCCS 目录中创建 p 文件,必须具有该目录下的写权限。 除其所有者之外,p 文件的许可权代码对所有人都是只读的,且它属有效用户所有。 p 文件不应直接由其所有者编辑。 p-file 包含:
  • 当前 SID
  • 要创建的新变化量的 SID
  • 用户名
  • get 命令的日期与时间
  • -i 标志,如果存在
  • -x 标志,如果存在

p 文件包含具有文件的每个暂挂变化量的前导信息的项。 任意两行不能有相同的新变化量 SID。

z 文件 z 文件是相对同时更新的锁定机制。 z 文件包含创建它的 get 命令的二进制进程编号。 该文件创建在包含 SCCS 文件的目录里,仅当 get 命令运行时存在。

当使用 get 命令时,它显示正在访问的 SID 以及从 SCCS 文件所创建的行数。 如果指定了 -e 标志,那么所要作的变动的 SID 出现在访问 SID 之后和创建行数之前。 如果指定不止一个文件、目录或标准输入,那么 get 命令在处理每个文件之前显示文件名。 如果指定 -i 标志,那么 get 命令会列出包含在单词下面的 deltasIncluded。如果指定 -x 标志,那么 get 命令将在单词下面列出排除的增量。Excluded.

下表举例说明了 get 命令如何决定它所检索文件的 SID 以及暂挂 SID。 “指定的 SID”列显示了用 -r 标志指定 SID 的不同方法。 第一列还说明可以存在的各种情况,包括 -b 标志是否与 get -e 命令一起使用。 “检索的 SID”列表示构成 g 文件的文件的 SID。 “要创建的变化量的 SID”列表示当应用 delta 命令时将会创建的版本的 SID。

SID 确定
指定的 SID 检索的 SID 要创建的变化量的 SID
1
使用 -b 吗?
其他条件
R 缺省为 mR 2
mR.mL mR.(mL+1)
1
使用 -b 吗?
其他条件
R 缺省为 mR
mR.mL mR.mL.(mB+1).1
R
使用 -b 吗?
其他条件
R>mR
mR.mL R.1 3
R
使用 -b 吗?
其他条件
R=mR
mR.mL mR.(mL+1)
R
使用 -b 吗?
其他条件
R>mR
mR.mL mR.mL.(mB+1).1
R
使用 -b 吗?
其他条件
R=mR
mR.mL mR.mL.(mB+1).1
R
使用 -b 吗?
不适用
其他条件
R<mR 和 R 不存在
hR.mL 4 hR.mL.(mB+1) .1
R
使用 -b 吗?
不适用
其他条件
发行版中存在干线后继作业> R 和 R
R.mL R.mL.(mB+1).1
R.L.
使用 -b 吗?
其他条件
无干线后续作业
R.L. R.(L+1)
R.L.
使用 -b 吗?
其他条件
无干线后续作业
R.L. R.L(mB+1).1
R.L.
使用 -b 吗?
不适用
其他条件
发行版中的干线后继作业> 或 = R
R.L. R.L.(mB+1).1
R.L.B.
使用 -b 吗?
其他条件
无分支后续作业
R.L.B.mS R.L.B.(mS+1)
R.L.B.
使用 -b 吗?
其他条件
无分支后续作业
R.L.B.mS R.L.(mB+1).1
R.L.B.S.
使用 -b 吗?
其他条件
无分支后续作业
R.L.B.S. R.L.B.(S+1)
R.L.B.S.
使用 -b 吗?
其他条件
无分支后续作业
R.L.B.S. R.L.(mB+1).1
R.L.B.S.
使用 -b 吗?
不适用
其他条件
分支后续作业
R.L.B.S. R.L.(mB+1).1
注: 在 "SID 确定" 表中,字母 R , L , B 和 S 是 SID 的发行版,级别,分支和序列组件。 字母 m 表示最大值。

1 仅当文件中不存在 -d (缺省 SID) 标志时适用 (请参阅 admin 命令)。

2 mR 表示现有最高发行版本。

3 在新的发行版中第一个变化量的强制创建。

4 hR 是比指定的不存在的发行版本 R 低的现有的最高发行版本。

标识关键字

通过在每次标识关键字出现时替换它们的值将标识信息插入到从 SCCS 文件检索的文本之中。 以下关键字可用于存储在 SCCS 文件中的文本:

关键词
%M% 模块名称: 文件中 m 标志的值,或者 (如果不存在) 具有 的 SCCS 文件的名称。 已除去。
%I% 检索到的文本的 SCCS 标识 (SID)(%R%.%L%%R%.%L%.%B%.%S%)。
%R% 发行版。
%L% 级别。
%B% 分支。
%S% 序列。
%D% 当前日期,格式为 YY/MM/DD
%H% 当前日期,格式为 MM/DD/YY
%T% 当前时间,格式为 HH:MM: SS
%E% 最新应用变化量的创建日期,格式化为 YY/MM/DD
%G% 最新应用变化量的创建日期,格式化为 MM/DD/YY
01:51:20 最新应用变化量的创建时间,格式化为 HH:MM:SS
%Y% 模块类型:SCCS 文件中 t 标志的值。
%F% SCCS 文件名。
%P% SCCS 绝对路径名。
%Q% 文件中 -q 标志的值。
%C% 当前行号。 此关键字用于标识程序输出的消息,例如this should not have happened错误消息。 并非每行上都使用 %C% 来提供序号。
%Z% 四字符字符串@(#)可由 内容 识别。
%W% 用于构造 内容 字符串的速记表示法:%W% = %Z%%M%<tab>%I%
%A% 另一个用于构造 内容 字符串的速记表示法:%A% = %Z%%Y% %M% %I%%Z%

标志

描述
-b 指定要创建的 delta 在新分支中应该有一个 SID。 新 SID 根据“SID 确定”表中给出的规则编号。 可仅与 -e 标志一起使用 -b 标志。 仅当想从叶增量(无后续作业的变化量)分支时才需要它。 尝试在非叶增量上创建变化量会自动产生分支,即使未设置 b 头标志。 如果在 SCCS 文件中不指定 b 头标志,get 命令将忽略 -b 标志,因为该文件不允许分支。
-c 分界值 指定切断的日期和时间,格式为 YY[MM[DD[HH[MM[SS]]]]]get 命令不包含在 g 文件中指定切断后对 SCCS 文件所创建的变化量。 Cutoff 变量中任何未指定项的值缺省为其最大许可值。 这样,一个只指定了年份的切断日期与时间将指定该年的最后的一个月份、日、小时、分钟和秒。 任意数量的非数字字符可分隔 Cutoff 变量日期和时间的两位项。 这就允许用若干种方法指定日期和时间,如下所示:
-c85/9/2,9:00:00
-c"85/9/2 9:00:00"
"-c85/9/2 9:00:00"
-e 表示正在创建的 g 文件将由用户通过应用 get 命令来编辑。 之后由 delta 命令记录变化量。 get -e 命令创建 p 文件以防止其他用户发出另一个 get -e 命令以及在 delta 命令运行之前于同一个 SID 上编辑第二个 g 文件。 该文件的所有者可以通过允许通过使用带有 -fj 标志的 admin 命令对同一 SID 进行联合编辑来覆盖此限制。 其他用户可在得到许可的条件下,通过不带 -e 标志的 get 命令获取只读副本。 get -e 命令执行用顶、底和 SCCS 文件中授权用户列表来指定的 SCCS 文件保护。 请参阅 admin 命令。
注意:如果不小心破坏了使用get -e命令创建的 g 文件,可以使用get-k命令重新创建该文件。
-g 禁止 g 文件的实际创建。 首先用 -g 标志创建 l 文件或验证特殊 SID 的存在。 不要将其与 -e 标志一起使用。
-i 列表 指定要包含在 g 文件的创建之中的变化量列表。 SID 列表格式由逗号分隔的各 SID 的组合以及由连字符分隔的两个 SID 表示的 SID 范围构成。 可以用如下任一命令行来指定同一个 SID。
get -e -i1.4,1.5,1.6 s.file
get -e -i1.4-1.6 s.file

可以通过上表所示的“指定的 SID”列中的任一形式来指定变化量的 SCCS 标识。 get 命令解释部分的 SID,如“检索的 SID”列中所示。

-k 禁止在 g 文件中用它们的值来替换标识关键字。 -k 标志由 -e 标志来暗示。 如果意外破坏了用 get -e 命令创建的 g 文件,可以通过重新发出 get 命令和 -k 标志来重新创建文件而不用 -e 标志。
-l[ p ] 将变化量摘要写入到 l 文件中。 如果指定了 -lp,那么变化量摘要写到标准输出,且 get 命令不创建 l 文件。 用该标志来决定将哪些变化量用于创建当前正在使用的 g 文件。 请参阅 sccsfile 文件以获取 l-file的格式。 另请参阅 -L 标志。
-L 将变化量摘要写到标准输出。 指定 -L 标志与使用 -lp 标志相同。
-M g 文件中每个文本行之前写入将行插入到 SCCS 文件之中的变化量的 SID。 格式是:

SID tab line of text

-n g 文件中每个文本行之前写入 %M% 关键字的值。 格式为 %M% 的值,后跟水平制表符,再跟文本行。 当同时使用 -m-n 标志时,格式为:

%M% value tab SID tab line of text

-p 将从 SCCS 文件创建的文本写到标准输出并且不创建 g 文件。 所有通常发送到标准输出的信息输出被发送到标准错误,除非指定 -s 标志和 -p 标志。 这时,通常发送到标准输出的输出在任何地方都不会出现。
-r SID 指定要创建的 SCCS 文件版本的 SCCS 标识字符串 (SID)。 SID 确定表显示创建的文件的版本并将暂挂变化量的 SID 显示为指定 SID 的函数。
-s 禁止通常要写入到标准输出的所有输出。 错误消息(写到标准错误输出),不受影响。
-t 访问给定发行版本中创建的最新的变化量或为给定发行版本和级别创建的最新的变化量。
-w 字符串 String 值替换为 g-files 中不用于编辑的 %W% 关键字。
-x 列表 排除 g 文件创建中指定的变化量列表。 请参阅 -i 标志以获取 SID 列表格式。

退出状态

本命令返回以下退出值:

描述
重大安全事件数量 成功完成。
> 0 发生错误。

示例

以下描述与示例说明了只读与可编辑版本文件之间的区别。

  1. 要在文件中打印当前日期和 SID ,请在文件中放置以下符号:
    %H% %I%
    %H% 是用于当前日期的符号,而 %I% 是用于 SID 的符号。 当 get 命令检索可编辑文件时,它将符号留在文件之中,不执行文本值替换。
  2. get 命令的以下示例构建具有最高 SID 的版本,因为该示例未指定文件的版本:
    $ ls
    s.test.c
    $ get s.test.c
    3.5
    59 lines
    $ ls
    s.test.c test.c
  3. In the next two examples, the -r flag specifies which version to get:
    $ get -r1.3 s.test.c
    1.3
    67 lines
     
    $ get -r1.3.1.4 s.test.c
    1.3.1.4
    50 lines
  4. 如果仅指定 SID 的发行版号,那么 get 命令将查找该发行版号中级别最高的文件。
    $ get -r2 s.test.c
    2.7
    21 lines
  5. 如果指定的 SID 大于最高的现有 SID ,那么 get 命令将获取最高的现有 SID。 如果指定的 SID 小于现有最小 SID,那么 SCCS 写入一个出错消息。 在以下示例中,发行版 7 是现有的最高发行版:
    $ get -r9 s.test.c
    7.6
    400 lines
  6. -t 标志获取给定发行版或级别中的顶级版本。 最高版本是最近创建的变化量,与其位置无关。 在下一个示例中,发行版 3 中现有的最高变化量为 3.5,而最新创建的变化量为 3.2.1.5。
    $ get -t -r3 s.test.c
    3.2.1.5
    46 lines
  7. 上述示例使用 get 命令来获取只读文件。 要创建可编辑并可用于创建新变化量的文件副本,请使用带 -e 标志的 get 命令。 用 unget 来撤销 get -e 命令的作用并废弃创建变化量之前对文件所作的任何更改。 以下示例显示如何使用 -e 标志:
    $ ls
    s.test.c
    $ get -e s.test.c
    1.3
    new delta 1.4
    67 lines
    $ ls
    p.test.c s.test.c test.c
    工作文件是test.c. 如果您编辑此文件并使用 delta 命令保存更改,那么 SCCS 将创建一个新的 delta ,其 SID 为1.4. 文件p.test.c是 SCCS 用于跟踪文件版本的临时文件。

    在上述示例中,还可以用 -r 标志获取特定的版本。 假定发行版1是最高的现有发行版和该增量1.3已存在并且是发行版中的最高增量, get 命令的以下三种用法等效:

    $ get -e s.test.c
    $ get -e -r1 s.test.c
    $ get -e -r1.3 s.test.c
  8. 要开始使用新的 (更高的值) 发行版号,请使用 -r 标志获取文件,并指定大于最大现有发行版号的发行版号。 在下一个示例中,发行版 2 还不存在:
    $ get -e -r2 s.test.c
    1.3
    new delta 2.1
    67 lines
    注意 get 命令表示当 delta 命令存储对 SCCS 文件的更改时将要创建的新变化量的版本。
  9. 要创建分支增量,请使用 -r 标志并指定分支出现的发行版和级别。 在下一个示例中, deltas1.31.4已存在。
    $ get -e -r1.3 s.test.c
    1.3
    new delta 1.3.1.1
    67 lines
    用相同方法在分支上创建变化量。

    要编辑一个文件,用 get -e 命令获取文件版本并用 delta 命令保存更改。 可存在 SCCS 文件的多个不同可编辑版本,只要它们在不同目录之中。 如果试图(用 get 命令)而不用 delta 命令将可编辑文件版本的副本放入一个目录下,那么 SCCS 写入一个错误消息。

    要不止一次获取同一个可编辑文件版本,在 SCCS 文件中用 admin 命令设置 j 头标志。 通过使用 -f 标志设置 j 选项。 可从不同目录下多次获取同一个 SID,为每个 get 命令创建一个独立的文件。 尽管文件起源于单个 SID,SCCS给每一个文件唯一的新 SID。

  10. 在以下示例中, pwd 命令显示当前目录。 然后用 admin 命令设置 j 选项:
    注: 您必须在这两个目录中都具有写访问权才能发出此示例中的命令。
    $ pwd
    /home/marty/sccs
    $ admin -fj s.test.c
  11. 然后使用 get 命令来检索文件的最新版本:
    注: 您必须在这两个目录中都具有写访问权才能发出此示例中的命令。
    $ get -e s.test.c
    1.1
    new delta 1.2
    5 lines
  12. 切换到 /home/new 目录,然后再次发出 get 命令。
    注: 您必须在这两个目录中都具有写访问权才能发出此示例中的命令。
    $ cd /home/new
    $ get -e /home/marty/sccs/s.test.c
    1.2
    new delta 1.1.1.1
    5 lines
    请注意, SCCS 会创建两个增量,1.21.1.1.1,从单个原始文件版本1.1. 查看 p.test.c 文件。 它显示当前使用中的每个版本的独立条目。 p.test.c 文件保留在目录中直到您用 delta 命令或 unget 命令来处理两个文件版本。

文件

描述
/usr/bin/get 包含 get 命令。