diff --git a/source/zh-CN/1.0.0/index.html.haml b/source/zh-CN/1.0.0/index.html.haml new file mode 100644 index 0000000..5bd7ce5 --- /dev/null +++ b/source/zh-CN/1.0.0/index.html.haml @@ -0,0 +1,300 @@ +--- +description: Keep a Changelog +title: Keep a Changelog +language: en +version: 1.0.0 +--- + +- changelog = "https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md" +- gemnasium = "https://gemnasium.com/" +- gh = "https://github.com/olivierlacan/keep-a-changelog" +- issues = "https://github.com/olivierlacan/keep-a-changelog/issues" +- semver = "http://semver.org/" +- shields = "http://shields.io/" +- thechangelog = "http://5by5.tv/changelog/127" +- vandamme = "https://github.com/tech-angels/vandamme/" +- iso = "http://www.iso.org/iso/home/standards/iso8601.htm" +- ghr = "https://help.github.com/articles/creating-releases/" + +.header + .title + %h1 Keep a Changelog + %h2 Don’t let your friends dump git logs into changelogs. + + = link_to changelog do + Version + %strong= current_page.metadata[:page][:version] + + %pre.changelog= File.read("CHANGELOG.md") + +.answers + %h3#what + %a.anchor{ href: "#what", aria_hidden: "true" } + What is a changelog? + + %p + A changelog is a file which contains a curated, chronologically + ordered list of notable changes for each version of a project. + + %h3#why + %a.anchor{ href: "#why", aria_hidden: "true" } + Why keep a changelog? + + %p + To make it easier for users and contributors to see precisely what + notable changes have been made between each release (or version) of + the project. + + %h3#who + %a.anchor{ href: "#who", aria_hidden: "true" } + Who needs a changelog? + + %p + People do. Whether consumers or developers, the end users of + software are human beings who care about what's in the software. When + the software changes, people want to know why and how. + +.good-practices + %h3#how + %a.anchor{ href: "#how", aria_hidden: "true" } + How do I make a good changelog? + + %h4#principles + %a.anchor{ href: "#principles", aria_hidden: "true" } + Guiding Principles + + %ul + %li + Changelogs are for humans, not machines. + %li + There should be an entry for every single version. + %li + The same types of changes should be grouped. + %li + Versions and sections should be linkable. + %li + The latest version comes first. + %li + The release date of each versions is displayed. + %li + Mention whether you follow #{link_to "Semantic Versioning", semver}. + + %a.anchor{ href: "#types", aria_hidden: "true" } + %h4#types Types of changes + + %ul + %li + %code Added + for new features. + %li + %code Changed + for changes in existing functionality. + %li + %code Deprecated + for soon-to-be removed features. + %li + %code Removed + for now removed features. + %li + %code Fixed + for any bug fixes. + %li + %code Security + in case of vulnerabilities. + +.effort + + %h3#effort + %a.anchor{ href: "#effort", aria_hidden: "true" } + How can I reduce the effort required to maintain a changelog? + + %p + Keep an Unreleased section at the top to track upcoming + changes. + + %p This serves two purposes: + + %ul + %li + People can see what changes they might expect in upcoming releases + %li + At release time, you can move the Unreleased section + changes into a new release version section. + +.bad-practices + %h3#bad-practices + %a.anchor{ href: "#bad-practices", aria_hidden: "true" } + Can changelogs be bad? + %p Yes. Here are a few ways they can be less than useful. + %h4#log-diffs + %a.anchor{ href: "#log-diffs", aria_hidden: "true" } + Commit log diffs + + %p + Using commit log diffs as changelogs is a bad idea: they're full of + noise. Things like merge commits, commits with obscure titles, + documentation changes, etc. + + %p + The purpose of a commit is to document a step in the evolution of + the source code. Some projects clean up commits, some don't. + + %p + The purpose of a changelog entry is to document the noteworthy + difference, often across multiple commits, to communicate them + clearly to end users. + + %h4#ignoring-deprecations + %a.anchor{ href: "#ignoring-deprecations", aria_hidden: "true" } + Ignoring Deprecations + %p + When people upgrade from one version to another, it should be + painfully clear when something will break. It should be possible to + upgrade to a version that lists deprecations, remove what's + deprecated, then upgrade to the version where the deprecations + become removals. + %p + If you do nothing else, list deprecations, removals, and any + breaking changes in your changelog. + %h4#confusing-dates + %a.anchor{ href: "#confusing-dates", aria_hidden: "true" } + Confusing Dates + + %p + In the U.S., people put the month first (06-02-2012 for + June 2nd, 2012), while many people in the rest of the world write a + robotic-looking 2 June 2012, yet pronounce it + differently. 2012-06-02 works logically from largest to + smallest, doesn't overlap in ambiguous ways with other date formats, + and is an #{link_to "ISO standard", iso}. Thus, it is the + recommended date format for changelogs. + + %aside + There’s more. Help me collect these antipatterns by + = link_to "opening an issue", issues + or a pull request. + +.frequently-asked-questions + %h3#frequently-asked-questions + %a.anchor{ href: "#frequently-asked-questions", aria_hidden: "true" } + Frequently Asked Questions + %h4#standard + %a.anchor{ href: "#standard", aria_hidden: "true" } + Is there a standard changelog format? + + %p + Not really. There's the GNU changelog style guide, or the two- + paragraph-long GNU NEWS file "guideline". Both are inadequate or + insufficient. + + %p + This project aims to be + = link_to "a better changelog convention.", changelog + It comes from observing good practices in the open source + community and gathering them. + + %p + Healthy criticism, discussion and suggestions for improvements + = link_to "are welcome.", issues + + + %h4#filename + %a.anchor{ href: "#filename", aria_hidden: "true" } + What should the changelog file be named? + + %p + Call it CHANGELOG.md. Some projects use + HISTORY, NEWS or RELEASES. + + %p + While it's easy to think that the name of your changelog file + doesn't matter that much, why make it harder for your end users to + consistently find notable changes? + + %h4#github-releases + %a.anchor{ href: "#github-releases", aria_hidden: "true" } + What about GitHub Releases? + %p + It's a great initiative. #{link_to "Releases", ghr} can be used to + turn simple git tags (for example a tag named v1.0.0) + into rich release notes by manually adding release notes or it can + pull annotated git tag messages and turn them into notes. + %p + GitHub Releases create a non-portable changelog that can only be + displayed to users within the context of GitHub. It's possible to + make them look very much like the Keep a Changelog format, but it + tends to be a bit more involved. + %p + The current version of GitHub releases is also arguably not very + discoverable by end-users, unlike the typical uppercase files + (README, CONTRIBUTING, etc.). Another + minor issue is that the interface doesn't currently offer links to + commit logs between each release. + %h4#automatic + %a.anchor{ href: "#automatic", aria_hidden: "true" } + Can changelogs be automatically parsed? + + %p + It’s difficult, because people follow wildly different formats and + file names. + + %p + #{link_to "Vandamme", vandamme} is a Ruby gem created by the + #{link_to "Gemnasium", gemnasium} team and which parses many (but + not all) open source project changelogs. + + + %h4#yanked + %a.anchor{ href: "#yanked", aria_hidden: "true" } + What about yanked releases? + + %p + Yanked releases are versions that had to be pulled because of a + serious bug or security issue. Often these versions don't even + appear in change logs. They should. This is how you should display + them: + + %p ## 0.0.5 - 2014-12-13 [YANKED] + + %p + The [YANKED] tag is loud for a reason. It's important + for people to notice it. Since it's surrounded by brackets it's also + easier to parse programmatically. + + + %h4#rewrite + %a.anchor{ href: "#rewrite", aria_hidden: "true" } + Should you ever rewrite a changelog? + + %p + Sure. There are always good reasons to improve a changelog. I + regularly open pull requests to add missing releases to open source + projects with unmaintained changelogs. + + %p + It's also possible you may discover that you forgot to address a + breaking change in the notes for a version. It's obviously important + for you to update your changelog in this case. + + + %h4#contribute + %a.anchor{ href: "#contribute", aria_hidden: "true" } + How can I contribute? + + %p + This document is not the truth; it’s my carefully + considered opinion, along with information and examples I gathered. + + %p + This is because I want our community to reach a consensus. I believe + the discussion is as important as the end result. + + %p + So please #{link_to "pitch in", gh}. + +.press + %h3 Conversations + %p + I went on #{link_to "The Changelog podcast", thechangelog} + to talk about why maintainers and contributors should care about changelogs, + and also about the motivations behind this project.