多行更改日誌條目的來源是什麼?
能夠深入研究軟體歷史並為程式碼找到適當的理由是很棒的。
我想我第一次在 Linux 更新檔中看到這些 - 預原始碼控制。顯然,在編寫 Git 時,它支持更新檔描述。但是在 Git 之前,像 Subversion 或 CVS 這樣的系統在編寫時考慮到了單行消息。
我們是否可以追溯到其他影響,或者它主要來自 Linux 開發?
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 <lm@bitkeeper.com> 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
要查看實現了什麼,您可能需要通讀source-code。這是大約一個月後的一些變化(這個變化評論暗示最初的解決方案並不令人滿意):
+/* + * 用一組評論提示使用者,返回 + * 0 如果他們想使用它們, + * -1 表示錯誤或中止。 + */ +整數 +comments_prompt(char *file) +{ + 字元緩衝區 [10]; + 外部字元 * 編輯器; + + 除非 (editor || (editor = getenv("EDITOR"))) 編輯器 = "vi"; + 而 (1) { + printf("\n-------------------------------------------- -----\n"); + fflush(標準輸出); + if (cat(file)) 返回 (-1); + printf("---------------------------------------------- ---\n"); + printf("使用這些註釋:(e)dit, (a)bort, (u)se?");
然後,問題又問到了origin。我記得DEC CMS(早於 CVS 1.3)以全屏(終端)模式提供其資訊。我在 1988-1989 年的時間範圍內使用了它。然而,Git 的起源是通過 CVS,反過來 CVS 可能是原創的(從某種意義上說,沒有受到早期工具的影響),也可能不是。