-
目標
-
生成 CHANGELOG.md
-
識別不重要的提交
-
在瀏覽 Git 歷史時提供更多資訊
-
-
格式化提交資訊
-
恢復(Revert)
-
資訊頭部
- 必需<type> - 必需<scope> - <subject>文字
-
資訊主體
-
資訊尾部
- 重大更改(Breaking changes) - 引用討論(Referencing issues)
-
目標
-
能夠通過指令碼生成 CHANGELOG.md
-
能讓 git bisect 過程忽略不重要的提交
-
在瀏覽歷史時提供更好的資訊
生成 CHANGELOG.md
我們在 changeling 裡使用這三個標誌: new features, bug fixes, breaking changes.
在做一個發行版的時候,這個列表可以通過指令碼來生成,通過關聯這些相關的提交。
自然,你可以在實際發行之前編輯這些變更日誌,但是這樣子可以很容易的生成骨架。
列出自最近一次發行以來所有的主體(提交資訊第一行)
>> git log <last tag> HEAD —pretty=format:%s
在本次發行內的新功能
>> git log <last release> HEAD —grep feature
識別不重要的提交
通常有很多的Formatting changes(adding/removing spaces/empty lines, indentation), missing semicolons, comments.所以當你查詢一些變更的時候,你可以忽略這些提交 – 這些提交裡面沒有業務邏輯變更。
當二分查詢的時候,你可以忽視這些提交通過鍵入以下命令:
>> git bisect skip $(git rev-list —grep irrelevant <good place> HEAD)
在瀏覽歷史時提供更多資訊
這將會增加一種“context”資訊
看這些資訊(通過檢視最近的 angularjs 的提交資訊)
-
Fix small typo in docs widget (tutorial instructions)
-
Fix test for scenario.Application – should remove old iframe
-
docs – various doc fixes
-
docs – stripping extra new lines
-
Replaced double line break with single when text is fetched from Google
-
Added support for properties in documentation
所有這些資訊都嘗試去表明更改的位置,但是它們沒有使用公共的規範
再看看這些資訊:
-
fix comment stripping
-
fixing broken links
-
Bit of refactoring
-
Check whether links do exist and throw exception
-
Fix sitemap include (to work on case sensitive linux)
你能猜出這裡面到底裝了些什麼?這些資訊缺乏重點。
也許還有這些程式碼:docs, docs-parser, compiler, scenario-runner, …
我知道,你可以通過檢視哪些檔案被改變來確定這個提交到底做了什麼,但是這樣子太麻煩了。
當檢視 git 歷史資訊的時候我們可以看到大家都在努力保持一致,但是缺少一個公共規範。
提交資訊的格式化
<type>(<scope>):<subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
提交資訊的任意一行都不能超過100個英文字元!這個能讓資訊在 github 上和 git 工具裡更容易檢視。
恢復
如果提交是用於恢復一個更早的提交,這個頭部應該以“revert:”開始,接下來是被恢復提交的頭部,在主體內應該寫“This reverts commit <hash>.”,hash 的位置就是被恢復提交的 sha 值
資訊頭部
資訊頭部應該是包含改變的一條單行簡要描述,包括一個型別,一個可選的範圍和一個主題
必需的<type>
這是用於說明提交的型別,下列是7個標誌。
-
feat: 新功能
-
fix : 修補bug
-
docs: 文件
-
style: 格式化,缺少分號等
-
refactor
-
test: 增加缺少的測試
-
chore 維護
必需的<scope>
範圍可以是任何制定的提交更改的地方。例如 $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView等等
<subject>文字
這是變更的簡單描述
-
以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes
-
第一個字母小寫
-
結尾不加句號
資訊主體
這部分是對本次提交的詳細描述,可以分成多行
-
使用第一人稱現在時,比如使用 change 而不是 changed 或者 changes。
-
說明程式碼變更的冬季,以及和以前程式碼的對比
資訊尾部
只有兩種情況:
不相容變動
所有不相容變動應該被列為不相容變動塊放在資訊尾部,應該以“BREAKING CHANGE:”開始,後面是對變動的描述,以及變動的動機和遷移方法
引用討論
如果當前提交是針對某個討論,那麼可以在尾部關閉這個討論
Closes #234
或者同時關閉多個討論
Closes #123, #245, #992