能够深入研究软件历史并为代码找到适当的理由是伟大的。
我想我第一次看到这些是在 Linux 补丁中——预源代码控制。显然Git在编写时就支持补丁描述。但在 Git 之前,Subversion 或 CVS 等系统在编写时就考虑了单行消息。
我们是否可以追溯到其他影响,或者它主要来自 Linux 开发?
答案1
RCS 早于 Linux,支持多行更改注释(我从 1988 年就开始使用该功能)。 CVS 继承了 RCS 的这一点。 rcs2log 自 1992 年以来一直存在,用于呈现 RCS 日志——包括多行注释。
RCS的ci
提示输入零行或多行以仅包含 a 的行结尾的更改注释.
(如邮件)。自 2003 年以来,我一直在使用 rcs2log 将 RCS 日志格式化为可读的变更日志,例如ded
。
顺便说一句,SCCS 还支持多行注释,但当我在 1986 年初开始使用它时,我发现它在这方面不太用户友好(请参阅讨论)。
多行变更注释的一个方面似乎被忽视了:进入他们以及可能修改他们。您可能会发现 CVS 的最旧版本(1992 年 4 月的 1.3)使用文本编辑器来实现此目的。 CVS 的所有后续版本中均包含此功能。您可以浏览来源这里,或签出只读复制。该存储库似乎是从 1994 年 11 月底开始的,当时版本在 1.3 到 1.4 之间(1.5 于 1995 年 7 月发布)。要查看 1.3,您必须获得一个 tarball。
Linus 当然意识到了这一点,因为 BitKeeper 的变更历史记录中反映的第一个请求就是针对此功能的:
commit e1dc29195bd72a9a4c8f1e817e08b8c0358ee88b
Author: Larry McVoy <[email protected]>
Date: Thu Jan 31 23:29:46 2002 -0800
Add a bk comment interface so that Linus can edit the comments after
the fact.
bk: 3c5a43eabhI7oSce6C4ms5U-kIcEv
要了解实施的内容,您可能需要阅读源代码。这是大约一个月后的一些更改(这个更改注释暗示最初的解决方案并不令人满意):
+/* + * 用一组注释提示用户,返回 + * 0 如果他们想使用它们, + * -1 表示错误或中止。 + */ +整数 +comments_prompt(char *文件) +{ + 字符缓冲区[10]; + extern char *编辑器; + + 除非 (编辑器 || (编辑器 = getenv("EDITOR"))) 编辑器 = "vi"; + 而 (1) { + printf("\n-------------------------------------------- -----\n"); + fflush(标准输出); + if (cat(文件)) return (-1); + printf("-------------------------------------------- ---\n"); + printf("使用这些注释:(e)dit、(a)bort、(u)se?");
话又说回来,问题问的是起源。我记得数字内容管理系统(早于 CVS 1.3)以全屏(终端)模式提供其信息。我在 1988 年至 1989 年期间使用过它。然而,Git 的起源经过 CVS,反过来 CVS 可能是原创的(从某种意义上说,没有受到接触早期工具的影响),也可能不是。