index.html.haml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. ---
  2. description: 如何維護更新日誌
  3. title: 如何維護更新日誌
  4. language: zh-TW
  5. version: 0.3.0
  6. ---
  7. :markdown
  8. # 如何維護更新日誌
  9. ## 更新日誌絕對不應該是git日誌的堆砌物
  10. Version **#{current_page.metadata[:page][:version]}**
  11. ### 更新日誌是什麽?
  12. 更新日誌(Change Log)是壹個由人工編輯,以時間為倒敘的列表。
  13. 這個列表記錄所有版本的重大變動。
  14. %pre.changelog= File.read("CHANGELOG.md")
  15. :markdown
  16. ### 為何要提供更新日誌?
  17. 為了讓用戶和開發人員更好知道每壹個版本有哪些區別。
  18. ### 為何我要在乎呢?
  19. 因為歸根結底軟件是為人提供的。既然妳不關心人,哪麽為何寫軟件呢?
  20. 多少妳還是要關心妳的受眾。
  21. 本文檔原作者和另外兩個人的壹個[播客][thechangelog]向大家介紹了,
  22. 為何代碼的管理者和開發者應該在乎更新日誌。如果妳有壹小時時間和很好的英文聽力本領,
  23. 不放聽聽。
  24. ### 怎麽定義好的更新日誌
  25. 好問題!
  26. 壹個好的更新日誌,壹定滿足:
  27. - 給人而不是機器寫的。記住,要說人話。
  28. - 快速跳轉到任意段。所以采用markdown格式
  29. - 壹個版本對應壹個章節。
  30. - 最新的版本在上,最老的在下面。
  31. - 所有日期采用'YYYY-MM-DD'這種規範。(例如北京奧運會的2008年8月8日是2008-08-08)這個是國際通用,任何語言
  32. 都能理解的,並且還被[xkcd](http://xkcd.com/1179/)推薦呢!
  33. - 標出來是否遵守[語義化版本格式][semver]
  34. - 每壹個軟件的版本必須:
  35. - 標明日期(要用上面說過的規範)
  36. - 標明分類(采用英文)。規範如下:
  37. - 'Added' 添加的新功能
  38. - 'Changed' 功能變更
  39. - 'Deprecated' 不建議使用,未來會刪掉
  40. - 'Removed' 之前不建議使用的功能,這次真的刪掉了
  41. - 'Fixed' 改的bug
  42. - 'Security' 改的有關安全相關bug
  43. ### 怎麽盡可能減少耗費的精力?
  44. 永遠在文檔最上方提供壹個'Unreleased' 未發布區域,來記錄當前的變化。
  45. 這佯作有兩大意義。
  46. - 大家可以看到接下來會有什麽變化
  47. - 在發布時,只要把'Unreleased'改為當前版本號,然後再添加壹個新的'Unreleased'就行了
  48. ### 吐槽環節到了
  49. 請妳壹定要註意:
  50. - **把git日誌扔到更新日誌裏。**看似有用,然並卵。
  51. - **不寫'deprecations'就刪功能。**不帶這樣坑隊友的。
  52. - **采用各種不靠譜日期格式** 2012年12月12日,也就中國人能看懂了。
  53. 如果妳還有要吐槽的,歡迎留[issue][issues]或者直接PR
  54. ### 世界上不是有標準的更新日誌格式嗎?
  55. 貌似GNU或者GNU NEWS還是提過些規範的,事實是它們太過簡陋了。
  56. 開發有那麽多中情況,采用那樣的規範,確實是不太合適的。
  57. 這個項目提供的[規範][CHANGELOG]是作者本人希望能夠成為世界規範的。
  58. 作者不認為當前的標準足夠好,而且作為壹個社區,我們是有能力提供更棒的規範。
  59. 如果妳對這個規範有不滿的地方,不要忘記還可以[吐槽][issues]呢。
  60. ### 更新日誌文件名應該叫什麽?
  61. 我們的案例中給的名字就是最好的規範:`CHANGELOG.md`,註意大小寫。
  62. 像`HISTORY.txt`, `HISTORY.md`, `History.md`, `NEWS.txt`,
  63. `NEWS.md`, `News.txt`, `RELEASES.txt`, `RELEASE.md`, `releases.md`這麽
  64. 多文件名就太不統壹了。
  65. 只會讓大家更難找到。
  66. ### 為何不直接記錄`git log`?
  67. 因為git日誌壹定是亂糟糟的。哪怕壹個最理想的由完美的程序員開發的提交的,哪怕壹個
  68. 從不忘記每次提交全部文件,不寫錯別字,不忘記重構每壹個部分——也無法保證git日誌完美無瑕。
  69. 況且git日誌的核心在於記錄代碼的演化,而更新日誌則是記錄最重要的變更。
  70. 就像註釋之於代碼,更新日誌之於git日誌。前者解釋*為什麽*,而後者說明*發生了什麽*。
  71. ### 更新日誌能機器識別嗎?
  72. 非常困難,因為有各種不同的文件格式和其他規範。
  73. [Vandamme][vandamme]是壹個Ruby程序(由[Gemnasium][gemnasium]團隊制作),可以解析
  74. 好多種(但絕對不是全部)開源庫的更新日誌。
  75. ### 到底是CHANGELOG還是更新日誌
  76. CHANGELOG是文件名,更新日誌是常用說法。CHANGELOG采用大寫是有歷史根源的。就像很多類似的文件
  77. [`README`][README], [`LICENSE`][LICENSE],還有[`CONTRIBUTING`][CONTRIBUTING]。
  78. 采用大寫可以更加顯著,畢竟這是項目很重要的元信息。就像[開源徽章][shields]。
  79. ### 那些後來撤下的版本怎麽辦?
  80. 因為各種安全/重大bug原因被撤下的版本被標記'YANKED'。這些版本壹般不出現在更新日誌裏,但作者建議他們出現。
  81. 顯示方式應該是:
  82. `## 0.0.5 - 2014-12-13 [YANKED]`
  83. `[YANKED]`采用大寫更加顯著,因為這個信息很重要。而采用方括號則容易被程序解析。
  84. ### 是否可以重寫更新日誌
  85. 當然。哪怕已經上線了,也可以重新更新更新日誌。有許多開源項目更新日誌不夠新,所以作者就會幫忙更新。
  86. 另外,很有可能妳忘記記錄壹個重大功能更新。所以這時候應該去重寫更新日誌。
  87. ### 如何貢獻?
  88. 本文檔並不是**真理**。這只是原作者的個人建議,並且包括許多收集的例子。
  89. 哪怕[本開源庫][gh]提供壹個[更新日誌案例][CHANGELOG],我刻意沒有提供壹個
  90. 過於苛刻的規則列表(不像[語義化版本格式][semver])。
  91. 這是因為我希望通過社區達到統壹觀點,我認為中間討論的過程與結果壹樣重要。
  92. 所以[歡迎貢獻][gh]。
  93. [CHANGELOG]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md
  94. [CONTRIBUTING]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CONTRIBUTING.md
  95. [LICENSE]: https://github.com/olivierlacan/keep-a-changelog/blob/master/LICENSE
  96. [README]: https://github.com/olivierlacan/keep-a-changelog/blob/master/README.md
  97. [gemnasium]: https://gemnasium.com/
  98. [gh]: https://github.com/olivierlacan/keep-a-changelog
  99. [issues]: https://github.com/olivierlacan/keep-a-changelog/issues
  100. [semver]: http://semver.org/lang/zh-CN/
  101. [shields]: http://shields.io/
  102. [thechangelog]: http://5by5.tv/changelog/127
  103. [vandamme]: https://github.com/tech-angels/vandamme