mirror of
https://github.com/olivierlacan/keep-a-changelog.git
synced 2025-08-22 18:28:16 +02:00
276 lines
20 KiB
HTML
276 lines
20 KiB
HTML
<!DOCTYPE html> <html lang='zh-CN'> <head> <meta charset='utf-8'> <meta content='IE=edge' http-equiv='X-UA-Compatible'> <meta content='width=device-width, initial-scale=1.0' name='viewport'> <meta content='更新日志绝对不应该是git日志的堆砌物' name='description'> <meta content='https://www.facebook.com/olivier.lacan.5' property='og:article:publisher'> <meta content='如何维护更新日志' property='og:title'> <meta content='article' property='og:type'> <meta content='https://keepachangelog.com/zh-CN/0.3.0/' property='og:url'> <meta content='更新日志绝对不应该是git日志的堆砌物' property='og:description'> <meta content='https://keepachangelog.com/assets/images/keep-a-changelog-opengraph-851f2d20.png' property='og:image'> <link href='/assets/images/favicon.ico' rel='shortcut icon' type='image/x-icon'> <link href='https://keepachangelog.com/zh-CN/0.3.0/' rel='canonical'> <title>如何维护更新日志</title> <link href='https://fonts.googleapis.com' rel='preconnect'> <link crossorigin='true' href='https://fonts.gstatic.com' rel='preconnect'> <link href="//fonts.googleapis.com/css?family=Muli:400,700&display=swap" rel="stylesheet"/> <link href="//fonts.googleapis.com/css?family=Source+Code+Pro:400,700&display=swap" rel="stylesheet"/> <link href="/assets/stylesheets/legacy-8d0d490e.css" rel="stylesheet"/> <script src="/assets/javascripts/all-466c2b8a.js" defer="defer"></script> </head> <body> <article> <header> <div class='newer'> There is a newer version available: <a href="/zh-CN/1.1.0">简体中文 1.1.0</a> </div> <nav class='locales' role='navigation'> <label for='language-select' title='Pick one of the 28 translations'>Languages (28):</label> <select id='language-select' name='language'> <option label='1.0.0 العربية' value='ar'> 1.0.0 العربية </option> <option label='1.1.0 Čeština' value='cs'> 1.1.0 Čeština </option> <option label='1.1.0 Dansk' value='da'> 1.1.0 Dansk </option> <option label='1.1.0 Deutsch' value='de'> 1.1.0 Deutsch </option> <option label='1.1.0 English' value='en'> 1.1.0 English </option> <option label='1.1.0 Español' value='es-ES'> 1.1.0 Español </option> <option label='1.1.0 Français' value='fr'> 1.1.0 Français </option> <option label='1.0.0 Hrvatski' value='hr'> 1.0.0 Hrvatski </option> <option label='1.0.0 Indonesia' value='id-ID'> 1.0.0 Indonesia </option> <option label='1.1.0 Italiano' value='it-IT'> 1.1.0 Italiano </option> <option label='1.1.0 日本語' value='ja'> 1.1.0 日本語 </option> <option label='1.1.0 Norsk (Bokmål)' value='nb'> 1.1.0 Norsk (Bokmål) </option> <option label='1.1.0 Nederlands' value='nl'> 1.1.0 Nederlands </option> <option label='1.1.0 polski' value='pl'> 1.1.0 polski </option> <option label='1.1.0 Português do Brasil' value='pt-BR'> 1.1.0 Português do Brasil </option> <option label='1.1.0 română' value='ro'> 1.1.0 română </option> <option label='1.1.0 Pyccкий' value='ru'> 1.1.0 Pyccкий </option> <option label='1.0.0 Slovenčina' value='sk'> 1.0.0 Slovenčina </option> <option label='1.0.0 ქართული' value='ka'> 1.0.0 ქართული </option> <option label='1.1.0 Slovenščina' value='sl'> 1.1.0 Slovenščina </option> <option label='1.0.0 Srpski' value='sr'> 1.0.0 Srpski </option> <option label='1.1.0 Svenska' value='sv'> 1.1.0 Svenska </option> <option label='1.1.0 Türkçe' value='tr-TR'> 1.1.0 Türkçe </option> <option label='1.1.0 Українська' value='uk'> 1.1.0 Українська </option> <option label='1.1.0 简体中文' selected value='zh-CN'> 1.1.0 简体中文 </option> <option label='1.1.0 正體中文' value='zh-TW'> 1.1.0 正體中文 </option> <option label='1.0.0 한국어' value='ko'> 1.0.0 한국어 </option> <option label='1.1.0 فارسی' value='fa'> 1.1.0 فارسی </option> </select> </nav> </header> <div class='main' role='main'> <h1>如何维护更新日志</h1> <h2>更新日志绝对不应该是git日志的堆砌物</h2> Version <strong>0.3.0</strong> <h3>更新日志是什么?</h3> <p>更新日志(Change Log)是一个由人工编辑,以时间为倒序的列表。 这个列表记录所有版本的重大变动。</p> <pre class="changelog"># Changelog
|
||
|
||
All notable changes to this project will be documented in this file.
|
||
|
||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||
|
||
## [Unreleased]
|
||
|
||
### Added
|
||
|
||
- v1.1 Brazilian Portuguese translation.
|
||
- v1.1 German Translation
|
||
- v1.1 Spanish translation.
|
||
- v1.1 Italian translation.
|
||
- v1.1 Polish translation.
|
||
- v1.1 Ukrainian translation.
|
||
|
||
### Changed
|
||
|
||
- Use frontmatter title & description in each language version template
|
||
- Replace broken OpenGraph image with an appropriately-sized Keep a Changelog
|
||
image that will render properly (although in English for all languages)
|
||
- Fix OpenGraph title & description for all languages so the title and
|
||
description when links are shared are language-appropriate
|
||
|
||
### Removed
|
||
|
||
- Trademark sign previously shown after the project description in version
|
||
0.3.0
|
||
|
||
## [1.1.1] - 2023-03-05
|
||
|
||
### Added
|
||
|
||
- Arabic translation (#444).
|
||
- v1.1 French translation.
|
||
- v1.1 Dutch translation (#371).
|
||
- v1.1 Russian translation (#410).
|
||
- v1.1 Japanese translation (#363).
|
||
- v1.1 Norwegian Bokmål translation (#383).
|
||
- v1.1 "Inconsistent Changes" Turkish translation (#347).
|
||
- Default to most recent versions available for each languages.
|
||
- Display count of available translations (26 to date!).
|
||
- Centralize all links into `/data/links.json` so they can be updated easily.
|
||
|
||
### Fixed
|
||
|
||
- Improve French translation (#377).
|
||
- Improve id-ID translation (#416).
|
||
- Improve Persian translation (#457).
|
||
- Improve Russian translation (#408).
|
||
- Improve Swedish title (#419).
|
||
- Improve zh-CN translation (#359).
|
||
- Improve French translation (#357).
|
||
- Improve zh-TW translation (#360, #355).
|
||
- Improve Spanish (es-ES) transltion (#362).
|
||
- Foldout menu in Dutch translation (#371).
|
||
- Missing periods at the end of each change (#451).
|
||
- Fix missing logo in 1.1 pages.
|
||
- Display notice when translation isn't for most recent version.
|
||
- Various broken links, page versions, and indentations.
|
||
|
||
### Changed
|
||
|
||
- Upgrade dependencies: Ruby 3.2.1, Middleman, etc.
|
||
|
||
### Removed
|
||
|
||
- Unused normalize.css file.
|
||
- Identical links assigned in each translation file.
|
||
- Duplicate index file for the english version.
|
||
|
||
## [1.1.0] - 2019-02-15
|
||
|
||
### Added
|
||
|
||
- Danish translation (#297).
|
||
- Georgian translation from (#337).
|
||
- Changelog inconsistency section in Bad Practices.
|
||
|
||
### Fixed
|
||
|
||
- Italian translation (#332).
|
||
- Indonesian translation (#336).
|
||
|
||
## [1.0.0] - 2017-06-20
|
||
|
||
### Added
|
||
|
||
- New visual identity by [@tylerfortune8](https://github.com/tylerfortune8).
|
||
- Version navigation.
|
||
- Links to latest released version in previous versions.
|
||
- "Why keep a changelog?" section.
|
||
- "Who needs a changelog?" section.
|
||
- "How do I make a changelog?" section.
|
||
- "Frequently Asked Questions" section.
|
||
- New "Guiding Principles" sub-section to "How do I make a changelog?".
|
||
- Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo).
|
||
- German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4).
|
||
- Italian translation from [@azkidenz](https://github.com/azkidenz).
|
||
- Swedish translation from [@magol](https://github.com/magol).
|
||
- Turkish translation from [@emreerkan](https://github.com/emreerkan).
|
||
- French translation from [@zapashcanon](https://github.com/zapashcanon).
|
||
- Brazilian Portuguese translation from [@Webysther](https://github.com/Webysther).
|
||
- Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek).
|
||
- Russian translation from [@aishek](https://github.com/aishek).
|
||
- Czech translation from [@h4vry](https://github.com/h4vry).
|
||
- Slovak translation from [@jkostolansky](https://github.com/jkostolansky).
|
||
- Korean translation from [@pierceh89](https://github.com/pierceh89).
|
||
- Croatian translation from [@porx](https://github.com/porx).
|
||
- Persian translation from [@Hameds](https://github.com/Hameds).
|
||
- Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s).
|
||
|
||
### Changed
|
||
|
||
- Start using "changelog" over "change log" since it's the common usage.
|
||
- Start versioning based on the current English version at 0.3.0 to help
|
||
translation authors keep things up-to-date.
|
||
- Rewrite "What makes unicorns cry?" section.
|
||
- Rewrite "Ignoring Deprecations" sub-section to clarify the ideal
|
||
scenario.
|
||
- Improve "Commit log diffs" sub-section to further argument against
|
||
them.
|
||
- Merge "Why can’t people just use a git log diff?" with "Commit log
|
||
diffs".
|
||
- Fix typos in Simplified Chinese and Traditional Chinese translations.
|
||
- Fix typos in Brazilian Portuguese translation.
|
||
- Fix typos in Turkish translation.
|
||
- Fix typos in Czech translation.
|
||
- Fix typos in Swedish translation.
|
||
- Improve phrasing in French translation.
|
||
- Fix phrasing and spelling in German translation.
|
||
|
||
### Removed
|
||
|
||
- Section about "changelog" vs "CHANGELOG".
|
||
|
||
## [0.3.0] - 2015-12-03
|
||
|
||
### Added
|
||
|
||
- RU translation from [@aishek](https://github.com/aishek).
|
||
- pt-BR translation from [@tallesl](https://github.com/tallesl).
|
||
- es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex).
|
||
|
||
## [0.2.0] - 2015-10-06
|
||
|
||
### Changed
|
||
|
||
- Remove exclusionary mentions of "open source" since this project can
|
||
benefit both "open" and "closed" source projects equally.
|
||
|
||
## [0.1.0] - 2015-10-06
|
||
|
||
### Added
|
||
|
||
- Answer "Should you ever rewrite a change log?".
|
||
|
||
### Changed
|
||
|
||
- Improve argument against commit logs.
|
||
- Start following [SemVer](https://semver.org) properly.
|
||
|
||
## [0.0.8] - 2015-02-17
|
||
|
||
### Changed
|
||
|
||
- Update year to match in every README example.
|
||
- Reluctantly stop making fun of Brits only, since most of the world
|
||
writes dates in a strange way.
|
||
|
||
### Fixed
|
||
|
||
- Fix typos in recent README changes.
|
||
- Update outdated unreleased diff link.
|
||
|
||
## [0.0.7] - 2015-02-16
|
||
|
||
### Added
|
||
|
||
- Link, and make it obvious that date format is ISO 8601.
|
||
|
||
### Changed
|
||
|
||
- Clarified the section on "Is there a standard change log format?".
|
||
|
||
### Fixed
|
||
|
||
- Fix Markdown links to tag comparison URL with footnote-style links.
|
||
|
||
## [0.0.6] - 2014-12-12
|
||
|
||
### Added
|
||
|
||
- README section on "yanked" releases.
|
||
|
||
## [0.0.5] - 2014-08-09
|
||
|
||
### Added
|
||
|
||
- Markdown links to version tags on release headings.
|
||
- Unreleased section to gather unreleased changes and encourage note
|
||
keeping prior to releases.
|
||
|
||
## [0.0.4] - 2014-08-09
|
||
|
||
### Added
|
||
|
||
- Better explanation of the difference between the file ("CHANGELOG")
|
||
and its function "the change log".
|
||
|
||
### Changed
|
||
|
||
- Refer to a "change log" instead of a "CHANGELOG" throughout the site
|
||
to differentiate between the file and the purpose of the file — the
|
||
logging of changes.
|
||
|
||
### Removed
|
||
|
||
- Remove empty sections from CHANGELOG, they occupy too much space and
|
||
create too much noise in the file. People will have to assume that the
|
||
missing sections were intentionally left out because they contained no
|
||
notable changes.
|
||
|
||
## [0.0.3] - 2014-08-09
|
||
|
||
### Added
|
||
|
||
- "Why should I care?" section mentioning The Changelog podcast.
|
||
|
||
## [0.0.2] - 2014-07-10
|
||
|
||
### Added
|
||
|
||
- Explanation of the recommended reverse chronological release ordering.
|
||
|
||
## [0.0.1] - 2014-05-31
|
||
|
||
### Added
|
||
|
||
- This CHANGELOG file to hopefully serve as an evolving example of a
|
||
standardized open source project CHANGELOG.
|
||
- CNAME file to enable GitHub Pages custom domain.
|
||
- README now contains answers to common questions about CHANGELOGs.
|
||
- Good examples and basic guidelines, including proper date formatting.
|
||
- Counter-examples: "What makes unicorns cry?".
|
||
|
||
[unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.1.1...HEAD
|
||
[1.1.1]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.1.0...v1.1.1
|
||
[1.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...v1.1.0
|
||
[1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0
|
||
[0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0
|
||
[0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0
|
||
[0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0
|
||
[0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8
|
||
[0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7
|
||
[0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6
|
||
[0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5
|
||
[0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4
|
||
[0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3
|
||
[0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2
|
||
[0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1
|
||
</pre> <h3>为何要提供更新日志?</h3> <p>为了让用户和开发人员更好知道每一个版本有哪些区别。</p> <h3>为何我要在乎呢?</h3> <p>因为归根结底软件是为人提供的。既然你不关心人,那么为何写软件呢? 多少你还是要关心你的受众。</p> <p>本文档原作者和另外两个人的一个<a href="https://changelog.com/podcast/127">播客</a>向大家介绍了, 为何代码的管理者和开发者应该在乎更新日志。如果你有一小时时间和很好的英文听力本领, 不妨听听。</p> <h3>怎么定义好的更新日志</h3> <p>好问题!</p> <p>一个好的更新日志,一定满足:</p> <ul> <li>给人而不是机器写的。记住,要说人话。</li> <li>快速跳转到任意段。所以采用markdown格式</li> <li>一个版本对应一个章节。</li> <li>最新的版本在上,最老的在下面。</li> <li>所有日期采用'YYYY-MM-DD'这种规范。(例如北京奥运会的2008年8月8日是2008-08-08)这个是国际通用,任何语言 都能理解的,并且还被<a href="https://xkcd.com/1179/">xkcd</a>推荐呢!</li> <li>标出来是否遵守<a href="https://semver.org/lang/zh-CN/">语义化版本格式</a></li> <li>每一个软件的版本必须: <ul> <li>标明日期(要用上面说过的规范)</li> <li>标明分类(采用英文)。规范如下:</li> <li>'Added' 添加的新功能</li> <li>'Changed' 功能变更</li> <li>'Deprecated' 不建议使用,未来会删掉</li> <li>'Removed' 之前不建议使用的功能,这次真的删掉了</li> <li>'Fixed' 改的bug</li> <li>'Security' 改的有关安全相关bug</li> </ul></li> </ul> <h3>怎么尽可能减少耗费的精力?</h3> <p>永远在文档最上方提供一个'Unreleased' 未发布区域,来记录当前的变化。 这样作有两大意义。</p> <ul> <li>大家可以看到接下来会有什么变化</li> <li>在发布时,只要把'Unreleased'改为当前版本号,然后再添加一个新的'Unreleased'就行了</li> </ul> <h3>吐槽环节到了</h3> <p>请你一定要注意:</p> <ul> <li><strong>把git日志扔到更新日志里。</strong>看似有用,然并卵。</li> <li><strong>不写'deprecations'就删功能。</strong>不带这样坑队友的。</li> <li><strong>采用各种不靠谱日期格式</strong> 2012年12月12日,也就中国人能看懂了。</li> </ul> <p>如果你还有要吐槽的,欢迎留<a href="https://github.com/olivierlacan/keep-a-changelog/issues">issue</a>或者直接PR</p> <h3>世界上不是有标准的更新日志格式吗?</h3> <p>貌似GNU或者GNU NEWS还是提过些规范的,事实是它们太过简陋了。 开发有那么多种情况,采用那样的规范,确实是不太合适的。</p> <p>这个项目提供的<a href="https://github.com/olivierlacan/keep-a-changelog/blob/main/CHANGELOG.md">规范</a>是作者本人希望能够成为世界规范的。 作者不认为当前的标准足够好,而且作为一个社区,我们是有能力提供更棒的规范。 如果你对这个规范有不满的地方,不要忘记还可以<a href="https://github.com/olivierlacan/keep-a-changelog/issues">吐槽</a>呢。</p> <h3>更新日志文件名应该叫什么?</h3> <p>我们的案例中给的名字就是最好的规范:<code>CHANGELOG.md</code>,注意大小写。</p> <p>像<code>HISTORY.txt</code>, <code>HISTORY.md</code>, <code>History.md</code>, <code>NEWS.txt</code>, <code>NEWS.md</code>, <code>News.txt</code>, <code>RELEASES.txt</code>, <code>RELEASE.md</code>, <code>releases.md</code>这么 多文件名就太不统一了。</p> <p>只会让大家更难找到。</p> <h3>为何不直接记录<code>git log</code>?</h3> <p>因为git日志一定是乱糟糟的。哪怕一个最理想的由完美的程序员开发和提交的,哪怕一个 从不忘记每次提交全部文件,不写错别字,不忘记重构每一个部分,也无法保证git日志完美无瑕。 况且git日志的核心在于记录代码的演化,而更新日志则是记录最重要的变更。</p> <p>就像注释之于代码,更新日志之于git日志。前者解释<em>为什么</em>,而后者说明<em>发生了什么</em>。</p> <h3>更新日志能机器识别吗?</h3> <p>非常困难,因为有各种不同的文件格式和其它规范。</p> <p><a href="https://github.com/tech-angels/vandamme/">Vandamme</a>是一个Ruby程序(由<a href="https://gemnasium.com/">Gemnasium</a>团队制作),可以解析 好多种(但绝对不是全部)开源库的更新日志。</p> <h3>到底是CHANGELOG还是更新日志</h3> <p>CHANGELOG是文件名,更新日志是常用说法。CHANGELOG采用大写是有历史根源的。就像很多类似的文件 <a href="https://github.com/olivierlacan/keep-a-changelog/blob/main/README.md"><code>README</code></a>, <a href="https://github.com/olivierlacan/keep-a-changelog/blob/main/LICENSE"><code>LICENSE</code></a>,还有<a href="https://github.com/olivierlacan/keep-a-changelog/blob/main/CONTRIBUTING.md"><code>CONTRIBUTING</code></a>。</p> <p>采用大写可以更加显著,毕竟这是项目很重要的元信息。就像<a href="https://shields.io/">开源徽章</a>。</p> <h3>那些后来撤下的版本怎么办?</h3> <p>因为各种安全/重大bug原因被撤下的版本被标记'YANKED'。这些版本一般不出现在更新日志里,但作者建议他们出现。 显示方式应该是:</p> <p><code>## [0.0.5] - 2014-12-13 [YANKED]</code></p> <p><code>[YANKED]</code>采用大写更加显著,因为这个信息很重要。而采用方括号则容易被程序解析。</p> <h3>是否可以重写更新日志</h3> <p>当然。哪怕已经上线了,也可以重新更新更新日志。有许多开源项目更新日志不够新,所以作者就会帮忙更新。</p> <p>另外,很有可能你忘记记录一个重大功能更新。所以这时候应该去重写更新日志。</p> <h3>如何贡献?</h3> <p>本文档并不是<strong>真理</strong>。这只是原作者的个人建议,并且包括许多收集的例子。 哪怕<a href="https://github.com/olivierlacan/keep-a-changelog">本开源库</a>提供一个<a href="https://github.com/olivierlacan/keep-a-changelog/blob/main/CHANGELOG.md">更新日志案例</a>,我刻意没有提供一个 过于苛刻的规则列表(不像<a href="https://semver.org/lang/zh-CN/">语义化版本格式</a>)。</p> <p>这是因为我希望通过社区达到统一观点,我认为中间讨论的过程与结果一样重要。</p> <p>所以<a href="https://github.com/olivierlacan/keep-a-changelog">欢迎贡献</a>。</p> <footer class='footer clearfix' role='contentinfo'> <img src="/assets/images/keep-a-changelog-mark-f8b06a42.svg" width="30" height="30" class="mark" alt=""/> <p class='about'> This project is <a href="https://choosealicense.com/licenses/mit/">MIT Licensed</a> // <a href="https://github.com/olivierlacan/keep-a-changelog/">Created & maintained</a> by <a href="https://olivierlacan.com/">Olivier Lacan</a> <a href="https://ruby.social/@olivierlacan" rel="me" aria-label="Link to Olivier Lacan's Mastodon account"></a> // Designed by Tyler Fortune </p> </footer> </div> </article> </body> <script>
|
||
var _gauges = _gauges || [];
|
||
(function() {
|
||
var t = document.createElement('script');
|
||
t.type = 'text/javascript';
|
||
t.async = true;
|
||
t.id = 'gauges-tracker';
|
||
t.setAttribute('data-site-id', '5389808eeddd5b055a00440d');
|
||
t.src = '//secure.gaug.es/track.js';
|
||
var s = document.getElementsByTagName('script')[0];
|
||
s.parentNode.insertBefore(t, s);
|
||
})();
|
||
</script> </html> |