这是命令 fhist,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
fhist - 文件历史
概要
拳头 文件名... 选项...
拳头 -帮助
拳头 -版本
商品描述
这个 拳头 程序用于跟踪文件的连续版本。 使用这个
程序,您可以记住对文件所做的所有更改,并取回任何旧的
版本。 该能力的用途是:
1. 您可以对文件进行一系列试探性编辑,如有必要,请备份到
最后一个“好”的编辑。
2. 你可以从你的文件中删除旧的子程序和代码,它们已经过时了,但仍然
能够在将来需要它们时取回它们。
3. 你可以比较文件的两个版本,看看你是如何解决一些老问题的,所以
您可以在以后检查修复的正确性。
4.每个版本都有你的评论记录,让你快速知道是什么
修复了错误,并实现了哪些功能。
5. 文件上次编辑的日期可以自动存储在文件中。
这个 拳头 程序操作模块。 模块只是您所在的任何文本文件
有兴趣保留的版本。 例如,一个源文件 做.c 是一个模块,所以
是一个文档文件 操作指南.doc. 模块名称包括文件的后缀(如
上面的例子)。 但是,路径名不是模块名称的一部分,因此
/usr/dbell/bar.c 不能是合法的模块名称。 模块名称限制为 12 个字符
自 拳头 程序需要两个额外的字符用于其目的。
关键字 换人
可以将有关文件状态的信息插入到文件中。
查看 -调整 和 - 无关键字 选项,如下,了解更多信息。
配置
理解以下选项:
-路径 路径名
模块存储在一个目录中,称为模块存储目录。 这
默认目录是 科学技术学院,因此相对于您当前的位置
目录。 当您处于包含许多
模块,并且您希望本地存储目录仅包含这些模块。 如果
你用 -p 选项,然后您可以在任何位置找到存储目录
选择。 如果您选择为所有用户设置一个公共存储目录,这将非常有用
您的文件,与它们实际使用的位置无关。
存储目录中的文件不应由您更改。 这样做
可能会破坏你的编辑历史,在你提取旧的时导致错误
修订。 但是,供您参考,每个模块都存储为两个文件
目录。 与 .s 后缀是最新版本的副本
模块,开头多出一行。 与 .e 后缀是
模块的编辑历史,并包含提取所需的信息
模块的先前版本。 因此,如果编辑历史被损坏,您
至少会有最新版本的模块。
-Make_Path
此选项可用于请求创建路径目录
如果尚不存在,则自动。 这适用于目录
由 -Path 选项指定,并为默认值。 中间目录将
必要时也可以创建。
-二进制 此选项可用于指定文件是二进制文件,它可能包含
空字符。 您必须始终如一地存在或不存在
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 -二进制 每个文件的选项与 -创建, -更新,
-条件更新 和 -提炼 选项。 不这样做会产生
结果不一致。 注意:这是不同的行为 补偿(1) 选项
同名。 注意: -二进制 选项确实 而不去 暗示 - 无关键字 选项。
-创建
要使用 拳头 程序第一次,你需要创建你的存储
目录。 所以, cd 到您希望它所在的目录,即
可能是包含要保存其修订版本的模块的目录。
然后创建目录 科学技术学院 (或其他名称,如果您不想使用
默认名称)。
开始使用下面的模块 拳头,您必须首先使用 -创建 选项。 这个
在存储目录中为该模块创建初始编辑,使用
指定模块的内容作为初始编辑。 因此,如果你有一个来源
文件 程序,然后命令:
fhist prog.c -创建
创建模块的初始编辑。 作为此过程的一部分,您需要
提供有关文件的备注。 稍后可以使用 -列表
选项(如下所述)。 打完备注后,
然后保存文件。 然后您可以删除该文件 程序 如果需要,和 拳头
以后可以重新创建它。 或者你可以把它作为工作副本留在那里
模块的。
这个 -创建 选项可以与 -更新 or -条件更新 选项
根据需要创建文件。
-更新
要保存模块的另一个修订版,您可以使用 -更新 选项。 这更新
存储目录中的文件以包含最新更改。 备注是
再次要求,以便您可以记录您进行此编辑的原因。 因此,到
继续示例,编辑后 程序, 命令:
fhist 程序.c -u
将更改保存为新的编辑。 此命令比较最新版本的
模块到以前的版本,保存了差异 .e 文件,和
将新源复制到 .s 文件。 此时可以再次删除
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 程序 如果需要,文件,然后取回两个版本中的任何一个
程序。
这个 拳头 程序在创建或更新期间处理配额或磁盘已满问题
操作而不会损坏编辑历史文件。 如果编辑不能
由于此类问题而完成,编辑将完全退出,并且您
将收到有关磁盘问题的错误消息。 不需要任何错误
在这种情况下恢复,除了在更多磁盘空间时重试更新
可用。 的 拳头 程序还在关键文件期间禁用信号
操作,因此您不必担心损坏编辑历史文件
因为试图退出程序。
这个 -创建 选项可以与 -更新 or -条件更新 选项
根据需要创建文件。
输入 文件名
在任一 -创建 or -更新 选项,包含新版本的文件
模块默认与模块同名。 在示例中,模块
程序 是从文件中的数据创建和更新的 程序. 当你愿意
来自其他文件的数据,您可以使用 输入 选项,其中
指定用于数据的输入文件。 例如,如果你想
更新 程序, 但来自一个名为 新程序,然后命令:
fhist prog.c -u -i newprog.c
将保存模块的新版本 程序, 但使用文件中的数据
新程序. 在这种情况下,文件 程序 不一定存在,也不是
引用,即使它确实存在。 同样,一旦更新完成,您就可以
删除 新程序 如果需要,文件,然后您可以检索其内容。
-评论
可以从文件而不是从终端读取备注。 这 -评论 选项
可用于指定包含备注的文件名。 如果没有文件
名字后面 -评论 选项,则根本不使用任何注释。 命令:
fhist 程序.c -u -r
将创建一个新的修订版 程序 不要求或保存任何备注
关于编辑。
-Remark_String 文本
也可以直接在命令行上指定备注。 你可以
仅使用此选项一次。
-提炼 [ 编辑 ]
要检索模块的先前修订版,请指定模块的名称
并使用 -提炼 选项指定要检索的编辑编号。 编辑
数字从 1 开始按顺序分配。因此初始版本的
该模块的编辑号为 1,第一个修订版的编辑号为 2,依此类推
直到最新版本。 如果 -提炼 不使用选项,或者如果没有编辑
为其提供编号,然后提取最新的编辑编号。 所以,
如果根本没有指定任何选项,这是默认操作。
编辑编号也可以是零、负数或带有可选偏移量的名称。
数字零表示最新的编辑编号,负数表示
从最新的编辑编号向后编辑编号。 编辑名称代表编辑
名称已通过使用 -名称 选项。 例如,如果编辑
数字 10 与名称相关联 FOO,然后是编辑名称 FOO 代表 10,
foo-4 代表编辑号6,和 富+2 代表编辑号 12。特殊的
保留名称 最老的 和 最新 参考最旧和最新版本
编辑历史中的模块。
作为检索的示例,假设您已保存该模块的十个版本
程序. 然后,以下命令将使用以下命令提取文件的版本
指定的编辑编号:
拳头程序
版本 10(最新)
fhist 程序.c -e 9
版本 9(之前的版本)
fhist prog.c -e 最老
版本 1(最旧的版本)
fhist prog.c -e -2
版本 8(最新版本 - 2)
输出文件名再次默认为模块名称。 所以当模块
程序 被提取,指定版本的模块被写入 程序
文件中。
为了防止意外覆盖文件, 拳头 程序将通过
如果会发生覆盖,默认会询问您是否允许覆盖。 一个常见的错误
是编辑 程序,然后尝试更新模块,但忘记指定 -u
选项。 然后 拳头 程序将尝试提取最新版本的
模块,从而用新的更改覆盖文件。 问问题
让你注意到你的错误,并防止覆盖。
输出 文件名
您可以使用以下命令更改输出文件名 输出 选项。 因此,命令:
fhist prog.c -o newprog.c
将提取模块的最新版本 程序,并将其放入文件
新程序. 再一次,文件“prog.c”被忽略,无论它是否存在。
-强制写入
此选项将强制覆盖文件,因此从不询问您是否
允许覆盖。 这在 shell 脚本中通常很有用,或者当你
肯定 要覆盖任何现有文件。
-No_Write
此选项是不覆盖选项,将导致任何现有文件 而不去
被覆盖,再次不问你。 如果您已经有一些,这很有用
目录中的模块,并且您想提取其余的模块
无需覆盖您已有的。 指定两者 -前写 和
-No_Write 是一个错误。
-终奌站 [ 编辑 ]
此选项用于将提取的模块输出到标准输出,而不是
将其写入文件。 这对于查看一个的开头很有用
文件的版本。 如果您不想看到整体,可以中断此操作
文件中。
-调整 数
提取文件时, 拳头 程序查找并更新特殊字符
文件的前几行中的序列。 这些特殊序列用于
用于文档目的,例如描述文件来自的编辑编号。
为了提取和更新的速度,这些序列通常限于
文件的前 25 行,因为 拳头 程序然后不必检查
整个文件。 这 -调整 选项可用于将行数更改为
从默认值 25 修改。指定零完全禁用
特殊字符序列,而指定一个非常大的数字会导致
要检查文件每一行的序列(从而减慢 拳头 程序
下)。
每个特殊序列的形式是 [# 关键词 值, 关键词 值, ..., 关键词
折扣值 #] , 每个人 关键词 描述一个项目,每个 折扣值 是价值
前面的关键字。 关键字可以是大写或小写,或两者兼而有之。 这
后面的单个空格 [#, 在每个逗号之后,并在 #] 必须
展示。 如果序列错误,使用未知关键字,行更长
超过 200 个字符,或使用四个以上的关键字,则整行
不被改变。 当前可以使用的关键字如下:
编辑 编辑号
date 编辑的创建日期
user 创建编辑的用户的用户名
模块 模块名称
为了使用这个特殊的字符序列,您只需将它插入到您的
注释中的模块(在前几行内)。 完成此操作后,
序列的值部分可以为空。 例如,如果您想放置一个
特殊序列到一个名为的程序中 删除.c,然后你可以编辑前几个
行如下:
/*
* Delete - 删除文件的程序
* [# 编辑,日期 #]
*/
提取完成后,会自动提供正确的编辑编号和日期
作为新值插入。 因此,如果您提取模块的编辑 23 删除.c
它是在 8 年 89 月 XNUMX 日创建的,那么生成的文件将开始:
/*
* Delete - 删除文件的程序
* [# Edit 23, Date 8-Aug-89 #]
*/
更新模块时,永远不需要编辑这些序列,因为任何旧的
值将被删除并替换为新值。 此外,当使用 -d or
-杜 选项(如下所述),具有这些序列的行比较好像值
为空,因此不会导致虚假差异。
在更新期间,读取特殊字符序列和任何编辑值
found 与模块的当前编辑号进行比较。 如果它们不同,
然后更新失败。 这为两个用户的情况提供了互锁检查
提取相同版本的文件,编辑它,然后更新它
在彼此不了解的情况下。 在这种情况下,第二个用户将失败,并且
然后他可以将他的编辑与前一个用户的编辑合并,然后重试
更新。 如果没有特殊字符序列,则禁用此检查
包含编辑关键字,编辑编号值为空,或者如果
-强制更新 option 用于表示不需要检查。
-No_Keywords
此选项可用于禁用关键字特殊字符的使用
上面描述的序列。 包含关键字序列的文本被视为纯文本
文本。 注意: -No_Keywords 选项确实 而不去 暗示 -二进制 选项。
-名称 绳子
此选项用于关联模块的最新版本的名称。 它
可以与 -创建, -更新或 -差异_更新 选项,到
为模块的新版本指定名称。 也可以自己给
为了指定模块的最新版本的名称。 每个编辑号
可以有许多与之关联的名称,因此这不会删除以前的任何名称
为编辑定义的名称。 此选项可用于关联许多模块
一起。 例如,当一个程序的新版本准备发布时,
您可以为程序的每个模块指定相同的名称 版本1。 然后在
将来,您可以通过提取
使用名称进行编辑 版本1 对于每个模块。 编辑名称不能以 a 开头
数字,并且不能包含加号或减号。 这些规则防止模棱两可
解析编辑编号 -提炼, -终奌站, -全部和 -列表 选项。
-列表 [ edit1 [ edit2 ]]
此选项打印模块的编辑列表,给出用户名、日期、
用户备注,以及为编辑指定的名称。 如果没有提供编辑号,
然后以相反的顺序打印所有编辑。 如果提供单个编辑编号,
然后只打印那个编辑号。 如果提供了两个编辑号,则所有
打印指定范围内的编辑。 此选项的输出默认为
终点站。 您可以使用 输出 将结果保存到文件的选项。
-区别 [ edit1 [ edit2 ]]
此选项用于显示模块的两个版本之间的差异,
或者一个文件和一个模块的版本。 此动作共有三种模式,
取决于提供了多少编辑编号。 这些模式由
以下示例:
fhist foo.c -d
将最新版本与文件“foo.c”进行比较
fhist foo.c -d 3
将版本 3 与文件“foo.c”进行比较
fhist foo.c -d 3 4
比较版本 3 和版本 4
此选项接受 输入 选项指定要比较的文件。 什么时候
使用 -区别 选项,输出默认为终端。 因此,你
必须使用 输出 如果您希望将差异保存到文件中。 使用 -快的 -
-区别 只会输出更改的快速摘要,而不是
详细的变化。 此摘要仅提供插入的行数,
删除,并在文件之间保持不变。 使用 -什么 - -区别 将
显示所有两个文件,详细显示使用更改的差异
酒吧。
这个 -区别 选项可能需要写入一两个临时文件才能
提取要比较的模块的旧版本。 这些文件的名称类似于
T$n_nnn . 它们在差值输出之前再次被删除,以便
在输出完成之前停止输出不会留下这些文件。 这
临时文件通常写入当前目录。 如果这不是
由于权限或配额问题而合理,那么您可以指定
用于写入临时文件的目录。 这是通过定义
TMPDIR 环境变量作为目录的路径。
-差异_更新
此选项结合了 -区别 和 -更新 选项。 它
显示文件和模块的最新版本之间的差异。 如果
有任何差异,然后继续执行模块的更新
用那个文件,像往常一样要求评论。 这个选项在使用时非常有用
带有通配符模块名称。 然后你可以只更新那些模块
由编辑会话更改,并在键入之前查看每个模块的更改
对每个模块进行适当的注释。
您可以同时指定 -区别 和 -更新 选项,或者你可以使用这个
选项。 结果是相同的。
-条件更新
此选项有条件地更新模块。 也就是说,它只会在以下情况下进行更新
文件和模块的最新版本之间存在任何差异。 这个
当对目录中的许多模块进行相关更改时很方便,并且
使用通配符的一个命令可以只更新那些已更改的模块。
这个 -创建 选项可以与 -更新 or -条件更新 选项
根据需要创建文件。
-干净的
此选项用于删除与最新版本模块匹配的文件。
如果存在与模块的最新版本匹配的文件,则该文件为
删除,否则保留。 此选项用于清理工作目录
在构建产品的新版本之后。 此选项在以下情况下特别有用
与 -全部 选项。 它也将接受 输入 选项指定一个
包含要清理的文件的目录。
-查看
此选项用于确定文件是否与最新版本的文件不匹配
模块。 如果是,则给出一条消息。 如果文件匹配,则不会发生输出。
因此,此选项可用于确定哪些文件已被修改和需要
的更新。 这 -全部 此选项的默认选项,因为它通常是
用于所有模块。 例如,
拳头检查
将报告与最新模块不同的所有文件。 如果 -快的
指定,那么输出将包含模块名称,没有其他
输出。 这对于 shell 脚本中的反引号操作符很有用
引用过时的模块。 这 -查看 选项也将接受
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 输入 选项。
-修剪 编辑
此选项用于从编辑历史记录中永久删除早期编辑。 这个
如果您希望减少编辑占用的磁盘空间量,这很有用
历史文件,或者当你想开始另一个文件的发布,并想要一个副本时
新版本的编辑历史文件。 该选项需要一个编辑编号
保留,并删除该编辑之前编辑历史文件中的所有编辑,以及
不能再参考了。 例如,要仅保留当前编辑加上
模块的前 10 次编辑 文件,您可以使用以下命令:
fhist 文件 -prune -10
由于 -修剪 选项不可恢复(除非备份文件可用),
拳头 程序要求用户验证是否真的需要修剪。 这
-强制更新 选项可用于绕过此验证。
-全部
此选项可与任何操作选项一起使用。 这意味着执行
对模块存储目录中的所有模块进行操作。 或者,您可以
在命令行上指定多个模块名称,操作将是
使用这些模块执行。 您不能同时指定 -全部 和模块名称。
当使用多个模块或 -全部 选项, 输入 和 输出 选项
意思略有不同。 在这些情况下, 输入 和 输出
参数是一个目录名,其中包含与
模块名称。 如果参数不是目录,则给出错误。 这个
功能很有用,例如,提取所有模块并将它们放入一些
远程目录,如:
fhist -all -e -o 临时目录
为多个模块指定数字编辑编号时应该小心。
最有可能的是,特定的编辑编号不适用于多个模块,
因为与特定编辑编号相对应的更改通常不相关。
使用命名编辑可以避免这些问题。 例如,如果您想提取
每个模块都有一个被命名的编辑 rev3,那么你可以使用
命令:
fhist-全部-e rev3
使用多个模块的命令的其他一些有用示例是:
fhist *.c -创建
fhist -检查 -全部
fhist-cu-all
-详细
此选项可以与任何其他操作一起指定,并输出状态信息
关于行动的进展。 这对于调试问题很有用,或者
只是为了在系统缓慢或正在处理大文件时消遣。 它
接受一个数字参数来指示输出的详细程度。 级别是
如下:
0 根本没有输出(错误除外)。
1 单行输出描述动作(默认)。
2 行动进行时的详细状态。
-帮助
提供一些有关如何使用的帮助 拳头 程序。
-版本
显示什么版本 拳头 在跑。
所有选项都可以缩写; 缩写记录为大写字母,
所有小写字母和下划线 (_) 都是可选的。 您必须使用连续
可选字母的序列。
所有选项都不区分大小写,您可以将它们输入为大写或小写或
两者结合,大小写并不重要。
例如:参数“-help”、“-HELP”和“-h”都被解释为表示 -帮助
选项。 参数“-hlp”不会被理解,因为连续可选
未提供字符。
选项和其他命令行参数可以在命令行上任意混合。
GNU 长选项名称是可以理解的。 由于所有选项名称为 拳头 很长,这个
意味着忽略额外的前导“-”。 这 ”-选项=折扣值" 约定也是可以理解的。
文件 您的姓名 扩张
为方便起见,如果路径名以句点开头并且存在环境变量
使用该名称,则环境变量的值将用作实际
路径名。 例如,如果环境变量为 .FOO 具有价值
这是一个长名称,然后命令
拳头 -o .FOO
实际上相当于命令
fhist -o this.is.a.long.name
如果您想阻止以句点开头的路径名的扩展,那么您
可以使用路径名的替代形式,如下所示:
fhist -o ./.FOO
BINARY FILES
一般来说,fhist 可以处理你扔给它的所有文本文件,甚至是带有
不寻常的编码。 然而,拳头是 无法 优雅地处理包含
NUL 字符。
这个 补偿(1) 程序只是打印一个警告,然后继续,你需要知道它
在执行比较之前将 NUL 字符转换为 0x80 值。
这个 合并(1)程序在合并前也将NUL字符转换为0x80值,
警告后,任何输出文件都将包含此值,而不是原始 NUL
字符。
这个 拳头(1) 但是,如果任何输入文件包含 NUL,程序将生成致命错误
人物。 这是为了保护您的源文件免受无意损坏。
使用 VHDL 语言编写 -二进制 对于绝对必须包含 NUL 字符的文件。
退出 状态
这个 拳头 程序将在出现任何错误时以 1 状态退出。 这 拳头 程序只会
如果没有错误,则退出状态为 0。
参考文献:
该程序基于算法
An O(ND) 区别 算法 和 它的 变化, 尤金 W.迈尔斯, TR 85-6,
10 年 1985 月 XNUMX 日,亚利桑那大学计算机科学系,图斯康,
亚利桑那州 85721。
另见:
A 文件 竞品对比 教学计划, Webb Miller 和 Eugene W. Myers,软件实践和
经验,第 15 卷,第 11 期,1985 年 XNUMX 月。
版权
拳头版本 1.18.D001
版权所有 (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003、2004、2005、2006、2008、2009 彼得·米勒;
这个程序来源于一个作品
版权所有 (C) 1990 David I. Bell。
该程序是免费软件; 您可以根据以下条款重新分发和/或修改它
由自由软件基金会发布的 GNU 通用公共许可证; 任何一个
许可的第3版,或(由您选择)任何更高版本。
分发此程序是希望它有用,但不作任何保证;
甚至没有对适销性或针对特定目的的适用性的暗示保证。
有关更多详细信息,请参阅 GNU 通用公共许可证。
您应该已经收到一份 GNU 通用公共许可证以及该程序。
如果没有,请看http://www.gnu.org/licenses/>.
作者
彼得·米勒网站: http://miller.emu.id.au/pmiller/
/\/\* 电子邮件: [email protected]
大卫 I. 贝尔网站: http://www.canb.auug.org.au/~dbell
电子邮件: [email protected]
使用 onworks.net 服务在线使用 fhist