Merge pull request #153 from olivierlacan/0-4-0

1.0.0
This commit is contained in:
Olivier Lacan 2017-05-24 11:43:32 -04:00 committed by GitHub
commit 6c3101d886
30 changed files with 1136 additions and 256 deletions

View File

@ -6,18 +6,41 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] ## [Unreleased]
### Added ### Added
- zh-CN and zh-TW translations from @tianshuo. - "Why keep a changelog?" section.
- de translation from @mpbzh. - "Who needs a changelog?" section.
- it-IT translation from @roalz. - "How do I make a changelog?" section.
- sv translation from @magol. - "Frequently Asked Questions" section.
- tr-TR translation from @karalamalar. - New "Guiding Principles" sub-section to "How do I make a changelog?".
- fr translation from @zapashcanon. - Simplified and Traditional Chinese translations from @tianshuo.
- German translation from @mpbzh.
- Italian translation from @roalz.
- Swedish translation from @magol.
- Turkish translation from @karalamalar.
- French translation from @zapashcanon.
- Brazilian Portugese translation from @aisamu.
- Polish translation from @amielucha.
### Changed ### 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 - Start versioning based on the current English version at 0.3.0 to help
translation authors keep things up-to-date. translation authors keep things up-to-date.
- Fix typos in zh-CN translation. - Rewrite "What makes unicorns cry?" section.
- Fix typos in pt-BR translation. - Rewrite "Ignoring Deprecations" sub-section to clarify the ideal
scenario.
- Improve "Commit log diffs" sub-section to further argument against
them.
- Merge "Why cant people just use a git log diff?" with "Commit log
diffs"
- Fix typos in Simplified Chinese and Traditional Chinese translations.
- Fix typos in Brazilian Portugese 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 ## [0.3.0] - 2015-12-03
### Added ### Added
@ -27,8 +50,8 @@ translation authors keep things up-to-date.
## [0.2.0] - 2015-10-06 ## [0.2.0] - 2015-10-06
### Changed ### Changed
- Remove exclusionary mentions of "open source" since this project can benefit - Remove exclusionary mentions of "open source" since this project can
both "open" and "closed" source projects equally. benefit both "open" and "closed" source projects equally.
## [0.1.0] - 2015-10-06 ## [0.1.0] - 2015-10-06
### Added ### Added
@ -94,7 +117,8 @@ notable changes.
## 0.0.1 - 2014-05-31 ## 0.0.1 - 2014-05-31
### Added ### Added
- This CHANGELOG file to hopefully serve as an evolving example of a standardized open source project CHANGELOG. - 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 - CNAME file to enable GitHub Pages custom domain
- README now contains answers to common questions about CHANGELOGs - README now contains answers to common questions about CHANGELOGs
- Good examples and basic guidelines, including proper date formatting. - Good examples and basic guidelines, including proper date formatting.

View File

@ -117,7 +117,7 @@ GEM
rb-fsevent (0.9.7) rb-fsevent (0.9.7)
rb-inotify (0.9.7) rb-inotify (0.9.7)
ffi (>= 0.5.0) ffi (>= 0.5.0)
redcarpet (3.3.3) redcarpet (3.4.0)
rouge (2.0.5) rouge (2.0.5)
sass (3.4.22) sass (3.4.22)
servolux (0.12.0) servolux (0.12.0)
@ -146,4 +146,4 @@ DEPENDENCIES
redcarpet redcarpet
BUNDLED WITH BUNDLED WITH
1.12.0 1.13.6

146
config.rb
View File

@ -3,21 +3,84 @@
# -------------------------------------- # --------------------------------------
# ----- Site ----- # # ----- Site ----- #
$last_version = "0.3.0" # Last version should be the latest English version since the manifesto is first
# written in English, then translated into other languages later.
$last_version = (Dir.entries("source/en") - %w[. ..]).last
# This list of languages populates the language navigation.
issues_url = 'https://github.com/olivierlacan/keep-a-changelog/issues'
$languages = { $languages = {
"cs" => "Čeština", "cs" => {
"de" => "Deutsch", name: "Čeština",
"en" => "English", notice: ""
"es-ES" => "Español", },
"fr" => "Français", "de" => {
"it-IT" => "Italiano", name: "Deutsch",
"pt-BR" => "Brazilian Portugese", notice: "Die neuste version (#{$last_version}) ist noch nicht auf Deutsch
"ru" => "Pyccкий", verfügbar, aber du kannst sie dir <a href='/en/'>auf Englisch durchlesen</a>
"sl" => "Slovenščina", und <a href='#{issues_url}'>bei der Übersetzung mithelfen</a>."
"sv" => "Svenska", },
"tr-TR" => "Türkçe", "en" => {
"zh-CN" => "简体中文", default: true,
"zh-TW" => " 繁體中文" name: "English",
notice: ""
},
"es-ES" => {
name: "Español",
notice: "Aún no está disponible la última versión (#{$last_version}) en
español, pero por ahora puedes <a href='/en/'>leerla en inglés</a> y <a
href='#{issues_url}'>ayudar a traducirla</a>."
},
"fr" => {
name: "Français",
notice: "La dernière version (#{$last_version}) n'est pas encore disponible
en français, mais vous pouvez la <a href='/en/'>lire en anglais</a> pour
l'instant et <a href='#{issues_url}'>aider à la traduire</a>."
},
"it-IT" => {
name: "Italiano",
notice: "L'ultima versione (#{$last_version}) non è ancora disponibile in
Italiano, ma la potete <a href='/en/'>leggere in Inglese</a> per ora e
potete <a href='#{issues_url}'>contribuire a tradurla</a>."
},
"pl-PL" => {
name: "Polskie",
notice: ""
},
"pt-BR" => {
name: "Brazilian Portugese",
notice: "A última versão (#{$last_version}) ainda não está disponível em
Português mas nesse momento você pode <a href='/en/'>-la em inglês</a> e
<a href='#{issues_url}'>ajudar em sua tradução</a>."
},
"ru" => {
name: "Pyccкий",
notice: "Самая последняя версия (#{$last_version}) ещё пока не переведена на
русский, но вы можете <a href='/en/'>прочитать её на английском</a> и <a
href='#{issues_url}'>помочь с переводом</a>."
},
"sl" => {
name: "Slovenščina",
notice: ""
},
"sv" => {
name: "Svenska",
notice: "Den senaste versionen (#{$last_version}) är ännu inte tillgänglig på Svenska,
men du kan <a href='/en/'>läsa det engelska</a> och även <a
href='#{issues_url}'>hjälpa till att översätta det</a>."
},
"tr-TR" => {
name: "Türkçe",
notice: ""
},
"zh-CN" => {
name: "简体中文",
notice: ""
},
"zh-TW" => {
name: "繁體中文",
notice: ""
}
} }
activate :i18n, activate :i18n,
@ -31,8 +94,9 @@ set :site_url, 'http://keepachangelog.com'
redirect "index.html", to: "en/#{$last_version}/index.html" redirect "index.html", to: "en/#{$last_version}/index.html"
$languages.each do |language| $languages.each do |language|
language_param = language.last.parameterize code = language.first
redirect "#{language.first}/index.html", to: "#{language.first}/#{$last_version}/index.html" versions = Dir.entries("source/#{code}") - %w[. ..]
redirect "#{code}/index.html", to: "#{code}/#{versions.last}/index.html"
end end
# ----- Assets ----- # # ----- Assets ----- #
@ -50,12 +114,38 @@ activate :automatic_image_sizes
activate :syntax activate :syntax
set :markdown_engine, :redcarpet set :markdown_engine, :redcarpet
set :markdown, {
## Override default Redcarpet renderer in order to define a class
class CustomMarkdownRenderer < Redcarpet::Render::HTML
def doc_header
%Q[<nav role="navigation" class="toc">#{@header}</nav>]
end
def header(text, header_level)
slug = text.parameterize
tag_name = "h#{header_level}"
anchor_link = "<a id='#{slug}' class='anchor' href='##{slug}' aria-hidden='true'></a>"
header_tag_open = "<#{tag_name} id='#{slug}'>"
output = ""
output << header_tag_open
output << anchor_link
output << text
output << "</#{tag_name}>"
output
end
end
$markdown_config = {
fenced_code_blocks: true, fenced_code_blocks: true,
footnotes: true, footnotes: true,
smartypants: true, smartypants: true,
tables: true tables: true,
with_toc_data: true,
renderer: CustomMarkdownRenderer
} }
set :markdown, $markdown_config
# -------------------------------------- # --------------------------------------
# Helpers # Helpers
@ -112,3 +202,23 @@ activate :autoprefixer do |config|
config.browsers = ['last 2 versions', 'Explorer >= 10'] config.browsers = ['last 2 versions', 'Explorer >= 10']
config.cascade = false config.cascade = false
end end
# Haml doesn't pick up on Markdown configuration so we have to remove the
# default Markdown Haml filter and reconfigure one that follows our
# global configuration.
module Haml::Filters
remove_filter("Markdown") #remove the existing Markdown filter
module Markdown
include Haml::Filters::Base
def renderer
$markdown_config[:renderer]
end
def render(text)
Redcarpet::Markdown.new(renderer.new($markdown_config)).render(text)
end
end
end

View File

@ -1 +0,0 @@
redirect "/", to: "/0.3.0/"

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 187.05 184.89"><defs><style>.cls-1{fill:#f4e0c2;}</style></defs><title>Artboard 1 copy 3</title><path class="cls-1" d="M62.09,6.5c-15.39,3.08-27.7,10.71-36.6,22.67C14.11,44.48,7.71,63.39,5.36,88.69c-.92,10,.06,20.05,1.34,31.18a73.74,73.74,0,0,0,15.86,38.56c6.9,8.56,14.82,14.18,24.2,17.19a88.55,88.55,0,0,0,24.67,4.25,45.42,45.42,0,0,0,5.88-.25l3.08-.31c4.24-.43,8.49-.86,12.73-1.37a158.36,158.36,0,0,0,54.68-16.7c14.84-7.75,25.22-19.18,30.84-34,2.62-6.88,3.87-12.67,3.87-18.08a33.91,33.91,0,0,0-.47-5.64c-3-17.59-9.14-32.75-18.9-46.33-12.09-16.83-24.32-28.68-38.48-37.31C103.11,6.76,82.64,2.38,62.09,6.5Zm29.73,8.13c20.19,4.42,38,14.81,52.92,30.87,16.92,18.2,26.56,37.31,29.49,58.42.53,3.91-.09,8.24-.71,12-2.87,17.21-12.3,30.05-28,38.16a155.31,155.31,0,0,1-53,16.14c-4.13.49-8.28.91-13,1.39l-.65.07a50.59,50.59,0,0,1-12.26-.23h0c-5.11-.72-10.89-1.55-16.45-2.87-13.07-3.11-22.7-12-29.42-27.06-5.06-11.37-7.68-24-8-38.7a132.53,132.53,0,0,1,8.5-50.28C25.83,40.4,32.46,27,46.85,19.86,61,12.82,75.74,11.11,91.83,14.63Z"/><path class="cls-1" d="M39.83,44.82C28.74,60.48,23,78.7,22.74,99a74.87,74.87,0,0,0,5.94,32.45c8,19,22.58,30.06,42.21,32,20.68,2,41-2.82,60.49-14.33a60.07,60.07,0,0,0,20.5-19.41,52.54,52.54,0,0,0,8.64-28.54c0-16-7.51-33.07-22.55-50.76a47.36,47.36,0,0,0-5.21-5.23c-23-19.78-44.72-25.81-66.87-18.4C54.05,30.67,45.78,36.43,39.83,44.82ZM148.43,121a50.36,50.36,0,0,1-21.5,22.1c-16.67,9.11-31.92,13.14-47.77,12.67H79c-11.47.45-21.38-2.36-30.31-8.6-5.18-3.61-9.18-8.89-12.24-16.15A80.91,80.91,0,0,1,30,99.42a93.56,93.56,0,0,1,7.57-35.9,89.91,89.91,0,0,1,6.47-12l1.2-2C50.2,41.33,58,37.4,68.19,34c16-5.27,31.72-2.55,49.55,8.56C130.93,50.82,141.12,63,148,78.87,154.56,93.81,154.69,108,148.43,121Z"/><path class="cls-1" d="M104.8,48c-17.06-7.52-32.45-5.88-45.72,4.88C48.76,61.24,42.58,73,39.63,89.81a53.56,53.56,0,0,0,5,34.12c7.85,15.19,20.7,23,37.17,22.56h.06c21.88-1.15,37.79-9.24,48.62-24.76a41.46,41.46,0,0,0,7.84-24,43,43,0,0,0-1.79-12.12C131.2,67.6,120.54,54.95,104.8,48ZM81.6,138.55h-.29c-7.43.59-14.75-1.67-21.77-6.73A27.13,27.13,0,0,1,50,119.1a56.51,56.51,0,0,1-3.8-20.17,62.68,62.68,0,0,1,5.52-25c5-11.51,12.75-18.51,23.78-21.4,9.07-2.36,18.1-1.45,27.59,2.8,13.78,6.16,22.73,17.25,26.62,33s-2,31.1-15.28,40.11C103.49,135.83,92.75,139.14,81.6,138.55Z"/><path class="cls-1" d="M83.47,105.25v14.12H74.93V68.46h8.54V96.28l9.11-9.89h11.16L89.9,100.87l16.81,18.5H95.9Z"/></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1 +1,32 @@
//= require_tree . document.addEventListener("DOMContentLoaded", function(){
var select = document.querySelector('.locales select');
select.addEventListener('change', function(event){
origin = window.location.origin;
languageCode = event.currentTarget.selectedOptions[0].value
window.location.replace(origin + "/" + languageCode)
});
var faqHeaders = document.querySelectorAll('.frequently-asked-questions h4');
for(header of faqHeaders){
header.addEventListener('click', toggleVisibility);
}
function toggleVisibility(event) {
element = event.target;
element.classList.toggle('is-visible')
lastParagraph = element.nextElementSibling;
paragraphs = [];
paragraphs.push(lastParagraph);
while (lastParagraph.nextElementSibling.tagName == "P") {
lastParagraph = lastParagraph.nextElementSibling;
paragraphs.push(lastParagraph)
}
for(paragraph of paragraphs) {
paragraph.classList.toggle('is-visible');
}
}
});

View File

@ -0,0 +1,17 @@
.anchor
display: none
font-style: normal
font-weight: normal
position: absolute
right: 100%
top: 0
.anchor::before
line-height: 3.2
content: ""
color: $color-ocre
padding-right: 0.1em
.anchor:hover
a
text-decoration: none

View File

@ -1,123 +1,97 @@
$base-font-family: "Carrois Gothic", "Helvetica Neue", Helvetica, Arial, sans-serif $base-font-family: 'Muli', "Helvetica Neue", Helvetica, Arial, sans-serif
$source-code-font-family: "Source Code Pro", monospace $source-code-font-family: "Source Code Pro", monospace
$color-black: #342828
$color-white: #FFFFFF
$color-ocre: #E05735
$color-gold: #faa930
$color-bark: #3F2B2D
$color-sand: #FEECD3
$color-light-sand: lighten($color-sand, 10%)
@import "layout"
@import "anchors"
@import "sections"
html html
font: 14px/1.4 $base-font-family font: 16px/1.4 $base-font-family
color: #333 color: #342828
background-color: $color-sand
a a
color: #E10FCE color: $color-ocre
font-weight: bold
text-decoration: none text-decoration: none
a:hover a:hover
text-decoration: underline text-decoration: underline
h1 h1
color: #C647BF color: $color-ocre
font-size: 4.1em font-size: 3.2em
font-weight: bold font-weight: bold
font-family: $source-code-font-family font-family: $base-font-family
margin-bottom: 0 margin-bottom: 0
line-height: 1 line-height: 1
word-spacing: -0.3em text-transform: lowercase
width: 50%
h2 h2
margin-top: 0 font-size: 1.2em
margin-top: 0.2em
margin-bottom: 2em margin-bottom: 2em
h1, h2 h1, h2
text-align: center text-align: left
h3 h3
font-size: 1.3em font-size: 1.3em
font-family: $source-code-font-family font-family: $base-font-family
margin-bottom: 0 margin-bottom: 1em
position: relative position: relative
padding-left: .1em padding-left: .1em
h3:hover .anchor, h3:focus .anchor h3:hover .anchor, h3:focus .anchor
display: block display: block
.anchor
display: none
font-style: normal
font-weight: normal
position: absolute
right: 100%
top: 0
.anchor::before
content: ''
.anchor:hover
text-decoration: none
h3 ~ p h3 ~ p
margin-top: 0 margin-top: 0
article h1, h2, h3
margin: 0 auto margin-top: 0
width: 640px
article p
font-size: 1.3em
article code
border-radius: 0.315em
border: 1px solid #ccc
padding: 0 0.3em 0.040em
font-size: 0.9em
article img
margin: 0 auto
max-width: 100%
text-align: center
display: block
box-shadow: rgba(0, 0, 0, 0.37) 0px 0px 6px
border-radius: 7px
padding: 0.4em 0.9em
article > ul
font-size: 1.2em
padding-left: 0
article > ul ul
padding-left: 1em
article ul
line-height: 1.5
list-style-position: inside
list-style-type: square
footer
font-size: .7em
border-top: 1px solid #e9e6e1
margin-top: 1em
margin-bottom: 2em
padding-top: 1em padding-top: 1em
.license .about
float: left text-align: center
.about .about
float: right
.about, .license
margin-top: 0 margin-top: 0
.changelog header
border: 1px solid #aaa .locales, .mark
margin: 0 0.5em margin-bottom: -2em
padding: 1em margin-top: 2em
overflow-x: auto margin-right: 2em
height: 20em
.mark
margin-left: 3em
float: left
.footer
line-height: 2.2
.mark
float: left
.locales
float: right
.locales li .locales li
float: right
font-size: 0.7em
display: inline display: inline
list-style-type: none list-style-type: none
padding-right: 20px
white-space: nowrap white-space: nowrap
pre, code pre, code
background-color: $color-light-sand
font-family: $source-code-font-family font-family: $source-code-font-family

View File

@ -0,0 +1,43 @@
$break-small: em(480px)
$break-medium: em(800px)
$break-large: em(1024px)
article
margin: 0 auto
width: 65em
.main
background-color: $color-white
margin-bottom: 2em
div
padding-left: 20%
padding-right: 20%
padding-bottom: 3em
aside
background-color: lighten(desaturate($color-bark, 5%), 10%)
margin-bottom: -3em
margin-left: -35%
margin-right: -35%
margin-top: 3em
padding: 2em 20%
text-align: center
aside &
background-position: top
article p
font-size: 1.3em
article code
border-radius: 0.315em
border: 1px solid #ccc
padding: 0 0.3em 0.040em
font-size: 0.9em
article ul
font-size: 1.1em
line-height: 1.5
list-style-type: square
padding-left: 1em

View File

@ -0,0 +1,180 @@
div.header
padding-top: 5em
padding-bottom: 0.1em
background-color: $color-ocre
background-image: image-url("bg-hero@2x.png")
background-size: 100%
h1
color: $color-sand
h2
font-weight: normal
a
color: $color-black
.title
width: 80%
margin: 0 auto
margin-bottom: -2em
.changelog
background-color: $color-white
box-shadow: 0px 4px 12px 0px hsla(0, 0%, 0%, 0.2)
font-size: 0.8em
height: 20em
margin-bottom: -14em
margin-left: 0.5em
margin-right: 0.5em
margin-top: 1em
overflow-x: auto
padding: 1em
div.answers
margin-top: 12em
padding-left: 25%
padding-right: 25%
background-color: $color-white
h3
font-size: 1.7em
color: $color-ocre
a
color: $color-gold
p
font-size: 1em
.good-practices
background-color: $color-gold
background-image: image-url("bg-img1@2x.png")
background-position: bottom left
background-repeat: no-repeat
background-size: 100%
padding-top: 2em
a.anchor
color: $color-black
h3
font-size: 1.6em
font-weight: bold
width: 50%
h4
padding-left: 15em
ul
font-size: 1em
padding-left: 16em
p
a
color: $color-white
text-decoration: underline
div.bad-practices
color: $color-white
background-color: $color-bark
background-image: image-url("bg-img2@2x.png")
background-position: bottom left
background-repeat: no-repeat
background-size: 100%
padding-top: 3em
code
color: $color-black
background-color: desaturate(lighten($color-bark, 50%), 10%)
border: none
p, aside
a
color: $color-gold
text-decoration: underline
aside
a
text-decoration: none
h3
font-size: 1.7em
color: $color-gold
float: left
width: 35%
h4, p
padding-left: 12em
p
clear: left
font-size: 1em
div.effort
padding-top: 2em
padding-left: 25%
padding-right: 25%
background-color: $color-white
h3
font-size: 1.6em
font-weight: bold
color: $color-ocre
div.frequently-asked-questions
padding-top: 2em
padding-left: 25%
padding-right: 25%
background-color: $color-white
h2
color: $color-ocre
h3
color: $color-ocre
margin-bottom: 1.5em
font-size: 1.7em
h4
cursor: pointer
border-bottom: 1px solid transparentize($color-bark, 0.8)
padding: 0 1.1em 1.3em 0
&:after
content: ""
text-align: right
float: right
font-size: 2.8em
line-height: 0.4
margin-right: -0.3em
&.is-visible:after
content: "-"
h4 ~ p
display: none
font-size: 0.9em
h4 ~ p.is-visible
display: inherit
.footer
font-size: .6em
font-weight: normal
border-top: 1px solid #e9e6e1
padding-top: 1em
padding-left: 2em
padding-right: 2em
background-color: $color-ocre
color: $color-sand
a
color: $color-white
text-decoration: underline
&:after
content: ""
display: table
clear: both

View File

@ -0,0 +1,29 @@
.toc
position: fixed
z-index: 9999
top: 10%
left: 0
ul
list-style-position: inside
list-style-type: decimal-leading-zero
padding: 0 0 0 1em
li
padding-left: 1em
line-height: 2
a
padding: 0 1em
line-height: 2
display: none
span
display: none
li:hover
color: $color-sand
background: $color-black
li:hover a
color: $color-sand
font-weight: bold
background-color: $color-black
display: inline-block

View File

@ -13,26 +13,25 @@ version: 0.3.0
Version **#{current_page.metadata[:page][:version]}** Version **#{current_page.metadata[:page][:version]}**
### Co je to changelog? ### Co je to changelog?
Changelog je soubor, který obsahuje organizovaný, chronologicky seřazený Changelog je soubor, který obsahuje organizovaný, chronologicky seřazený
seznam podstatných změn pro každou verzi daného projektu. seznam podstatných změn pro každou verzi daného projektu.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Co je smyslem changelogu? ### Co je smyslem changelogu?
Usnadnit uživatelům a přispěvatelům přesné zobrazení podstatných změn, které Usnadnit uživatelům a přispěvatelům přesné zobrazení podstatných změn, které
byly provedeny mezi jednotlivými vydáními (verzemi) daného projektu. byly provedeny mezi jednotlivými vydáními (verzemi) daného projektu.
### Proč by mi na tom mělo záležet? ### Proč by mi na tom mělo záležet?
Protože softwarové nástroje jsou pro lidi. Pokud ti na tom nezáleží, tak proč Protože softwarové nástroje jsou pro lidi. Pokud ti na tom nezáleží, tak proč
přispíváš do open source projektů? Určitě musí být v tvém úžasném malém mozku přispíváš do open source projektů? Určitě musí být v tvém úžasném malém mozku
alespoň jádro (haha!) ochoty. alespoň jádro (haha!) ochoty.
[Bavil jsem se s Adamem Stacoviakem a Jerodem Santem na podcastu The Changelog][thechangelog] [Bavil jsem se s Adamem Stacoviakem a Jerodem Santem na podcastu The Changelog][thechangelog]
(název sedí, co?) o tom proč by na tom mělo vedoucím a přispěvatelům projektů (název sedí, co?) o tom proč by na tom mělo vedoucím a přispěvatelům projektů
záležet a o tom jaká motivace je za tímto projektem. Jestli máš chvilku času záležet a o tom jaká motivace je za tímto projektem. Jestli máš chvilku času
(1:06), stojí to za poslech. (1:06), stojí to za poslech.
### Co dělá changelog dobrým? ### Co dělá changelog dobrým?
Výborná otázka, díky za ni. Výborná otázka, díky za ni.
@ -52,12 +51,12 @@ version: 0.3.0
- `Deprecated` pro dříve stabilní funkce, které budou odstraněny v novějších vydáních a nejsou podporovány. - `Deprecated` pro dříve stabilní funkce, které budou odstraněny v novějších vydáních a nejsou podporovány.
- `Removed` pro funkce odstraněné v daném vydání. - `Removed` pro funkce odstraněné v daném vydání.
- `Fixed` pro opravené chyby. - `Fixed` pro opravené chyby.
- `Security` pro navržení aktualizace uživatelům v případě bezpečnostních problémů. - `Security` pro navržení aktualizace uživatelům v případě bezpečnostních problémů.
### Jak mohu vyžadovanou snahu snížit na minimum? ### Jak mohu vyžadovanou snahu snížit na minimum?
Vždycky měj nahoře sekci `"Unreleased"`, ve které budou schromažďovány všechny Vždycky měj nahoře sekci `"Unreleased"`, ve které budou schromažďovány všechny
změny. změny.
To plní hned dva účely: To plní hned dva účely:
@ -66,103 +65,103 @@ version: 0.3.0
### Co zaručeně rozbrečí jednorožce? ### Co zaručeně rozbrečí jednorožce?
Dobrá… Tak si to povíme. Dobrá… Tak si to povíme.
- **Zkopírování diffu commit logů.** To prostě nedělej, nikomu to nepomůže. - **Zkopírování diffu commit logů.** To prostě nedělej, nikomu to nepomůže.
- **Nezdůraznění dále nepodporovaných funcí.** Když lidé aktualizují na novou verzi, mělo by jim být bolestivě jasné, že se něco rozbije. - **Nezdůraznění dále nepodporovaných funcí.** Když lidé aktualizují na novou verzi, mělo by jim být bolestivě jasné, že se něco rozbije.
- **Data v regionálních formátech.** V USA píšou lidé nejdříve měsíc ("06-02-2012" pro 2. června 2012, což nedává *vůbec žádný* smysl), zatímco mnoho lidí ve zbytku světa píše roboticky vypadající verzi "2 June 2012", ale vyslovují to jinak. "2012-06-02" je logicky napsané od největšího po nejmenší celek, nepřekrývá se nesrozumitelně s jinými fomáty data a je to [ISO standard](http://www.iso.org/iso/home/standards/iso8601.htm). Proto je to doporučovaný formát dat pro changelogy. - **Data v regionálních formátech.** V USA píšou lidé nejdříve měsíc ("06-02-2012" pro 2. června 2012, což nedává *vůbec žádný* smysl), zatímco mnoho lidí ve zbytku světa píše roboticky vypadající verzi "2 June 2012", ale vyslovují to jinak. "2012-06-02" je logicky napsané od největšího po nejmenší celek, nepřekrývá se nesrozumitelně s jinými fomáty data a je to [ISO standard](http://www.iso.org/iso/home/standards/iso8601.htm). Proto je to doporučovaný formát dat pro changelogy.
To ale není všechno. Pomoz mi sbírat jednorožčí slzy tím že To ale není všechno. Pomoz mi sbírat jednorožčí slzy tím že
[otevřeš issue][issues] nebo pull request. [otevřeš issue][issues] nebo pull request.
### Existuje pro formát changelogů nějaký standard? ### Existuje pro formát changelogů nějaký standard?
Bohužel ne. Klid. Vím, že se zuřivě snažíš najít ten odkaz na GNU návod jakým Bohužel ne. Klid. Vím, že se zuřivě snažíš najít ten odkaz na GNU návod jakým
stylem psát changelog, nebo onen dvouodstavcový GNU NEWS soubor, který si říká stylem psát changelog, nebo onen dvouodstavcový GNU NEWS soubor, který si říká
"směrnice". Zmíněný GNU návod je sice hezký začátek, ale je smutně naivní. Být "směrnice". Zmíněný GNU návod je sice hezký začátek, ale je smutně naivní. Být
naivní není nic špatného, ale když lidé potřebují radu, málokdy to někomu naivní není nic špatného, ale když lidé potřebují radu, málokdy to někomu
pomůže. Obzvlášť, když existuje tolik situací a okrajových případů, se kterými pomůže. Obzvlášť, když existuje tolik situací a okrajových případů, se kterými
se musí člověk nějak poprat. se musí člověk nějak poprat.
Tento projekt Tento projekt
[obsahuje něco, co se doufám jednou stane lepší konvencí pro CHANGELOGy][CHANGELOG]. [obsahuje něco, co se doufám jednou stane lepší konvencí pro CHANGELOGy][CHANGELOG].
Nemyslím si, že je momentální stav dostatečně dobrý, a jsem toho názoru, že Nemyslím si, že je momentální stav dostatečně dobrý, a jsem toho názoru, že
jsme jako komunita schopni vymyslet lepší konvence, pokud se budeme snažit jsme jako komunita schopni vymyslet lepší konvence, pokud se budeme snažit
vybrat ty nejlepší praktiky z doopravdových softwarových projektů. vybrat ty nejlepší praktiky z doopravdových softwarových projektů.
Porozhlédněte se a mějte na paměti, že Porozhlédněte se a mějte na paměti, že
[diskuse a návrhy na zlepšení jsou vítány][issues]! [diskuse a návrhy na zlepšení jsou vítány][issues]!
### Jak by se měl changelog jmenovat? ### Jak by se měl changelog jmenovat?
Inu, pokud jste to už nepoznali z příkladu výše, `CHANGELOG.md` je zatím ta Inu, pokud jste to už nepoznali z příkladu výše, `CHANGELOG.md` je zatím ta
nejlepší konvence. nejlepší konvence.
Některé projekty používají `HISTORY.txt`, `HISTORY.md`, `History.md`, Některé projekty používají `HISTORY.txt`, `HISTORY.md`, `History.md`,
`NEWS.txt`, `NEWS.md`, `News.txt`, `RELEASES.txt`, `RELEASE.md`, `NEWS.txt`, `NEWS.md`, `News.txt`, `RELEASES.txt`, `RELEASE.md`,
`releases.md`, apod. `releases.md`, apod.
Je v tom binec. Všecha tato jména jen komplikují život lidem, kteří se ten Je v tom binec. Všecha tato jména jen komplikují život lidem, kteří se ten
dokument snaží najít. dokument snaží najít.
### Proč lidé jednoduše nepoužívají `git log` diff?
Protože diffy logů jsou plné šumu — přirozeně. Nebyly by vyhovujícím
changelogem ani v hypotetickém projektu vedeném dokonalými lidmi, kteří nikdy
nedělají překlepy, nikdy nezapomínají commitnout nové soubory a nikdy jim
neunikne ani ta nejmenší část refactoringu. Cílem commitu je dokumentovat
jeden miniaturní krok při procesu, ve kterém se kód vyvíjí z jedné podoby do
druhé. Cílem changelogu je dokumentovat podstatné změny mezi těmito podobami.
Stějně jako je rozdíl mezi dobrými komentáři a samotným kódem, je také rozdíl
mezi changelogem a commitlogem: jeden říká *proč* a druhý jak.
### Mohou být changelogy automaticky parsované?
Je to složité, jelikož se lidé uchylují k nejrůznějším formátům a názvům
souborů.
[Vandamme][vandamme] je Ruby gem vytvořený týmem [Gemnasium][gemnasium], který ### Proč lidé jednoduše nepoužívají `git log` diff?
Protože diffy logů jsou plné šumu — přirozeně. Nebyly by vyhovujícím
changelogem ani v hypotetickém projektu vedeném dokonalými lidmi, kteří nikdy
nedělají překlepy, nikdy nezapomínají commitnout nové soubory a nikdy jim
neunikne ani ta nejmenší část refactoringu. Cílem commitu je dokumentovat
jeden miniaturní krok při procesu, ve kterém se kód vyvíjí z jedné podoby do
druhé. Cílem changelogu je dokumentovat podstatné změny mezi těmito podobami.
Stějně jako je rozdíl mezi dobrými komentáři a samotným kódem, je také rozdíl
mezi changelogem a commitlogem: jeden říká *proč* a druhý jak.
### Mohou být changelogy automaticky parsované?
Je to složité, jelikož se lidé uchylují k nejrůznějším formátům a názvům
souborů.
[Vandamme][vandamme] je Ruby gem vytvořený týmem [Gemnasium][gemnasium], který
parsuje mnoho (ale ne všechny) changelogů open source projektů. parsuje mnoho (ale ne všechny) changelogů open source projektů.
### Proč používáš jednou "CHANGELOG" a jindy "changelog"? ### Proč používáš jednou "CHANGELOG" a jindy "changelog"?
"CHANGELOG" je název samotného souboru. Je to třichu křiklavé, ale to už je "CHANGELOG" je název samotného souboru. Je to třichu křiklavé, ale to už je
historická konvence, kterou se řídí mnoho open source projektů. Příklady historická konvence, kterou se řídí mnoho open source projektů. Příklady
podobných souborů mohou být [`README`][README], [`LICENSE`][LICENSE] a podobných souborů mohou být [`README`][README], [`LICENSE`][LICENSE] a
[`CONTRIBUTING`][CONTRIBUTING]. [`CONTRIBUTING`][CONTRIBUTING].
Název psaný kapitálkami (díky kterému se ve starých operačních systémech Název psaný kapitálkami (díky kterému se ve starých operačních systémech
soubory držely na nejvyšších pozicích) je používán za účelem upoutání soubory držely na nejvyšších pozicích) je používán za účelem upoutání
pozornosti. Vzhledem k tomu, že se jedná o důležitá metadata o projektu a pozornosti. Vzhledem k tomu, že se jedná o důležitá metadata o projektu a
mohla by být užitečná pro kohokoliv, kdo ho chce používat nebo do něho mohla by být užitečná pro kohokoliv, kdo ho chce používat nebo do něho
přispívat, podobně [open source projektovým odznakům][shields]. přispívat, podobně [open source projektovým odznakům][shields].
Když mluvím o "changelogu", myslím tím funkci tohoto souboru: logování změn. Když mluvím o "changelogu", myslím tím funkci tohoto souboru: logování změn.
### Jak potom vypadají ta vydání, která byla zpětně stažena? ### Jak potom vypadají ta vydání, která byla zpětně stažena?
Zpětně stažená vydání jsou verze, které musely být zpětně odebrány kvůli vážné Zpětně stažená vydání jsou verze, které musely být zpětně odebrány kvůli vážné
chybě nebo bezpečnostním rizikům. Tyto verze se často v changelogu ani chybě nebo bezpečnostním rizikům. Tyto verze se často v changelogu ani
neobjevují, ale měly by. Zobrazovat by se měli takto: neobjevují, ale měly by. Zobrazovat by se měli takto:
`## 0.0.5 - 2014-12-13 [YANKED]` `## 0.0.5 - 2014-12-13 [YANKED]`
Tag `[YANKED]` je naschvál křiklavý. Je důležité, aby si ho lidé všimli. Díky Tag `[YANKED]` je naschvál křiklavý. Je důležité, aby si ho lidé všimli. Díky
tomu, že je v hranatých závorkách je take jednoduší ho parsovat programem. tomu, že je v hranatých závorkách je take jednoduší ho parsovat programem.
### Měl by se někdy changelog přepisovat? ### Měl by se někdy changelog přepisovat?
Jasně. Vždy se najde dobrý důvod pro zlepšení changelogu. Sám často otevírám Jasně. Vždy se najde dobrý důvod pro zlepšení changelogu. Sám často otevírám
pull requesty pro přidání chybějících vydání v open source projektech s pull requesty pro přidání chybějících vydání v open source projektech s
neudržovanými changelogy. neudržovanými changelogy.
Je také možné, že zjistíš, že v poznámkách k verzi ve tvém projektu není Je také možné, že zjistíš, že v poznámkách k verzi ve tvém projektu není
zmíněna změna, která něco mohla rozbít. V tom případě jě samozřejmě důležité, zmíněna změna, která něco mohla rozbít. V tom případě jě samozřejmě důležité,
aby byl changelog aktualizován. aby byl changelog aktualizován.
### Jak mohu přidat ruku k dílu? ### Jak mohu přidat ruku k dílu?
Tento dokument není čistá **pravda**; je to můj názor, nad kterým jsem opatrně Tento dokument není čistá **pravda**; je to můj názor, nad kterým jsem opatrně
uvažoval, v kombinaci s informacemi a příklady, které se mi podařilo získat. uvažoval, v kombinaci s informacemi a příklady, které se mi podařilo získat.
I přesto, že uvádím vlastní [CHANGELOG][] v [repozitáři na GitHubu][gh], I přesto, že uvádím vlastní [CHANGELOG][] v [repozitáři na GitHubu][gh],
naschvál jsem nevytvořil náležité *vydání* nebo jasný seznam pravidel, kterými naschvál jsem nevytvořil náležité *vydání* nebo jasný seznam pravidel, kterými
se někdo má řídit (jako to například udělali na [SemVer.org][semver]). se někdo má řídit (jako to například udělali na [SemVer.org][semver]).
Je tomu tak proto, že chci aby komunita došla ke společné shodě. Já sám jsem Je tomu tak proto, že chci aby komunita došla ke společné shodě. Já sám jsem
toho názoru, že diskuse je důležitou součástí finálního výsledku. toho názoru, že diskuse je důležitou součástí finálního výsledku.
Takže prosím [**přispějte**][gh] svou trochou do mlýna. Takže prosím [**přispějte**][gh] svou trochou do mlýna.
[CHANGELOG]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md [CHANGELOG]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md
[CONTRIBUTING]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CONTRIBUTING.md [CONTRIBUTING]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CONTRIBUTING.md

View File

@ -17,9 +17,8 @@ version: 0.3.0
Liste aller erheblichen Änderungen enthält, die zwischen Veröffentlichungen (oder Versionen) Liste aller erheblichen Änderungen enthält, die zwischen Veröffentlichungen (oder Versionen)
des Projekts umgesetzt wurden. des Projekts umgesetzt wurden.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Was ist der Zweck eines Changelogs? ### Was ist der Zweck eines Changelogs?
Es Benutzern und Entwicklern einfacher zu machen, gerade die beachtenswerten Änderungen, welche Es Benutzern und Entwicklern einfacher zu machen, gerade die beachtenswerten Änderungen, welche
zwischen Veröffentlichungen (oder Versionen) des Projekts gemacht wurden, zu sehen. zwischen Veröffentlichungen (oder Versionen) des Projekts gemacht wurden, zu sehen.

View File

@ -16,9 +16,8 @@ version: 0.3.0
A change log is a file which contains a curated, chronologically ordered A change log is a file which contains a curated, chronologically ordered
list of notable changes for each version of a project. list of notable changes for each version of a project.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Whats the point of a change log? ### Whats the point of a change log?
To make it easier for users and contributors to see precisely what 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. notable changes have been made between each release (or version) of the project.

View File

@ -0,0 +1,316 @@
---
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 Dont 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 sofware. 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 <em>for humans</em>, 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 <code>Unreleased</code> 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 <code>Unreleased</code> 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 (<code>06-02-2012</code> for
June 2nd, 2012), while many people in the rest of the world write a
robotic-looking <code>2 June 2012</code>, yet pronounce it
differently. <code>2012-06-02</code> 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
Theres 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's 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 <code>CHANGELOG.md</code>. Some projects use
<code>HISTORY</code>, <code>NEWS</code> or <code>RELEASES</code>.
%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 <code>v1.0.0</code>)
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
(<code>README</code>, <code>CONTRIBUTING</code>, 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
Its 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 <code>## 0.0.5 - 2014-12-13 [YANKED]</code>
%p
The <code>[YANKED]</code> 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 <strong>truth</strong>; its my carefully
considered opinion, along with information and examples I gathered.
Although I provide an actual #{link_to "CHANGELOG", changelog} on
#{link_to "the GitHub repo", gh}, I have purposefully not created a
proper <em>release</em> or clear list of rules to follow (as
#{link_to "SemVer.org", semver} does, for instance).
%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 <strong>#{link_to "pitch in", gh}</strong>.
.press
%h3 Conversations
%p
I went on #{link_to "The Changelog podcast", thechangelog}
about why maintainers and contributors should care, and the
motivations behind this project. If you can spare the time (1:06),
its a good listen.

View File

@ -16,9 +16,8 @@ version: 0.3.0
Un registro de cambios o “change log” de ahora en adelante, es un archivo que contiene una lista en orden cronológico sobre los cambios que vamos haciendo en cada reléase (o versión) de nuestro proyecto. Un registro de cambios o “change log” de ahora en adelante, es un archivo que contiene una lista en orden cronológico sobre los cambios que vamos haciendo en cada reléase (o versión) de nuestro proyecto.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Cuál es el propósito del change log? ### Cuál es el propósito del change log?
Para que les sea más fácil a los usuarios y contribuyentes, ver exactamente los cambios notables que se han hecho entre cada versión (o versiones) del proyecto. Para que les sea más fácil a los usuarios y contribuyentes, ver exactamente los cambios notables que se han hecho entre cada versión (o versiones) del proyecto.

View File

@ -17,9 +17,8 @@ version: 0.3.0
une liste triée chronologiquement des changements notables pour chaque une liste triée chronologiquement des changements notables pour chaque
version dun projet version dun projet
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Quel est lintérêt dun change log ? ### Quel est lintérêt dun change log ?
Il permet aux utilisateurs et aux contributeurs de voir plus simplement Il permet aux utilisateurs et aux contributeurs de voir plus simplement
les changements notables qui ont été réalisés entre chaque publication les changements notables qui ont été réalisés entre chaque publication
@ -181,7 +180,7 @@ version: 0.3.0
J'ouvre souvent des pull requests pour ajouter des publications manquantes sur J'ouvre souvent des pull requests pour ajouter des publications manquantes sur
des projets open source avec des change logs non-maintenus. des projets open source avec des change logs non-maintenus.
Il est aussi possible que vous découvriez que vous aviez oublié de mentionner Il est aussi possible que vous découvriez que vous aviez oublié de mentionner
un changement majeur dans les notes de version. Il est évidemment important un changement majeur dans les notes de version. Il est évidemment important
que vous mettiez votre change log à jour dans ce cas. que vous mettiez votre change log à jour dans ce cas.

View File

@ -13,17 +13,16 @@ language: it-IT
Un change log è un file che contiene una lista curata e ordinata cronologicamente Un change log è un file che contiene una lista curata e ordinata cronologicamente
delle modifiche degne di nota per ogni versione di un progetto. delle modifiche degne di nota per ogni versione di un progetto.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### A cosa serve un change log? ### A cosa serve un change log?
Per rendere facile agli utilizzatori e contribuenti vedere con precisione quali modifiche Per rendere facile agli utilizzatori e contribuenti vedere con precisione quali modifiche
importanti sono state fatte tra ogni release (o versione) del progetto. importanti sono state fatte tra ogni release (o versione) del progetto.
### Perché dovrebbe importarmi? ### Perché dovrebbe importarmi?
Perché gli strumenti software sono fatti per le persone. Perché gli strumenti software sono fatti per le persone.
Se non ti importa, perché contribuisci all'open source? Se non ti importa, perché contribuisci all'open source?
Di certo ci deve essere un "kernel" (ha!) di interesse Di certo ci deve essere un "kernel" (ha!) di interesse
da qualche parte in quel tuo amorevole cervello. da qualche parte in quel tuo amorevole cervello.
[Nel podcast "The Changelog" con Adam Stacoviak e Jerod Santo][thechangelog] [Nel podcast "The Changelog" con Adam Stacoviak e Jerod Santo][thechangelog]
@ -85,9 +84,9 @@ language: it-IT
è raramente d'aiuto. Specialmente se ci sono molte situazioni e casi limite da gestire. è raramente d'aiuto. Specialmente se ci sono molte situazioni e casi limite da gestire.
Questo progetto [contiene ciò che spero diventerà una migliore convenzione per i file CHANGELOG][CHANGELOG]. Questo progetto [contiene ciò che spero diventerà una migliore convenzione per i file CHANGELOG][CHANGELOG].
Non credo che lo status quo sia sufficientemente buono, e penso che noi, come comunità, Non credo che lo status quo sia sufficientemente buono, e penso che noi, come comunità,
possiamo arrivare a convenzioni migliori se tentiamo di estrarre le pratiche migliori possiamo arrivare a convenzioni migliori se tentiamo di estrarre le pratiche migliori
da progetti software reali. Vi consiglio di guardarvi intorno e ricordare che da progetti software reali. Vi consiglio di guardarvi intorno e ricordare che
[ogni discussione e suggerimento per migliorare sono sempre benvenuti][issues]! [ogni discussione e suggerimento per migliorare sono sempre benvenuti][issues]!
### Come si dovrebbe chiamare il file contenente il change log? ### Come si dovrebbe chiamare il file contenente il change log?
@ -104,7 +103,7 @@ language: it-IT
di digitazione, non dimenticano mai di fare commit dei nuovi file, non dimenticano mai di digitazione, non dimenticano mai di fare commit dei nuovi file, non dimenticano mai
alcuna parte di un refactoring. alcuna parte di un refactoring.
Lo scopo di un commit è di documentare un passo atomico nel processo di evoluzione del codice Lo scopo di un commit è di documentare un passo atomico nel processo di evoluzione del codice
da uno stato ad un altro. Lo scopo di un change log è di documentare le differenze da uno stato ad un altro. Lo scopo di un change log è di documentare le differenze
degne di nota tra questi stati. degne di nota tra questi stati.
La differenza tra un change log e un commit log è La differenza tra un change log e un commit log è
@ -113,18 +112,18 @@ language: it-IT
### Si possono analizzare automaticamente i change log? ### Si possono analizzare automaticamente i change log?
È difficile, perché le persone usano formati e nomi di file profondamente diversi. È difficile, perché le persone usano formati e nomi di file profondamente diversi.
[Vandamme][vandamme] è una Ruby gem [Vandamme][vandamme] è una Ruby gem
creata dal team [Gemnasium][gemnasium] ed è in grado di fare il parsing dei creata dal team [Gemnasium][gemnasium] ed è in grado di fare il parsing dei
change log di molti (ma non tutti) i progetti open source. change log di molti (ma non tutti) i progetti open source.
### Perché si alterna tra i nomi "CHANGELOG" e "change log"? ### Perché si alterna tra i nomi "CHANGELOG" e "change log"?
"CHANGELOG" è il nome del file. È un po' invadente ma è una "CHANGELOG" è il nome del file. È un po' invadente ma è una
convenzione storica seguita da molti progetti open source. convenzione storica seguita da molti progetti open source.
Altri esempi di file simili includono [`README`][README], [`LICENSE`][LICENSE], Altri esempi di file simili includono [`README`][README], [`LICENSE`][LICENSE],
e [`CONTRIBUTING`][CONTRIBUTING]. e [`CONTRIBUTING`][CONTRIBUTING].
I nomi in maiuscolo (che su vecchi sistemi operativi erano ordinati per primi) I nomi in maiuscolo (che su vecchi sistemi operativi erano ordinati per primi)
vengono usati per attirare l'attenzione su di essi. Poiché sono metadati vengono usati per attirare l'attenzione su di essi. Poiché sono metadati
importanti relativi al progetto, possono essere utili per chiunque voglia usarlo importanti relativi al progetto, possono essere utili per chiunque voglia usarlo
o contribuire ad esso, un po' come i [badge dei progetti open source][shields]. o contribuire ad esso, un po' come i [badge dei progetti open source][shields].
@ -158,7 +157,7 @@ language: it-IT
ho volutamente evitato di creare una *release* o una chiara lista di regole ho volutamente evitato di creare una *release* o una chiara lista di regole
da seguire (come fa, ad esempio, [SemVer.org][semver]). da seguire (come fa, ad esempio, [SemVer.org][semver]).
Questo è perché voglio che la nostra comunità raggiunga un consenso. Credo che Questo è perché voglio che la nostra comunità raggiunga un consenso. Credo che
la discussione sia importante almeno quanto il risultato finale. la discussione sia importante almeno quanto il risultato finale.
Quindi per favore [**partecipate**][gh]. Quindi per favore [**partecipate**][gh].

View File

@ -1,50 +1,74 @@
!!! 5 !!! 5
%html %html
%head{lang: current_page.data.language} %head{ lang: current_page.data.language }
%meta{charset: 'utf-8'} %meta{ charset: 'utf-8' }
%meta{content: 'IE=edge', 'http-equiv' => 'X-UA-Compatible'} %meta{ content: 'IE=edge', 'http-equiv' => 'X-UA-Compatible' }
%meta{name: 'viewport', content: 'width=device-width, initial-scale=1.0'} %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }
%meta{name: 'description', content: current_page.data.description} %meta{ name: 'description', content: current_page.data.description }
-# Open Graph -# Open Graph
%meta{property: 'og:article:publisher', content: config.publisher_url} %meta{ property: 'og:article:publisher', content: config.publisher_url }
%meta{property: 'og:title', content: current_page.data.title} %meta{ property: 'og:title', content: current_page.data.title }
%meta{property: 'og:type', content: 'article'} %meta{ property: 'og:type', content: 'article' }
%meta{property: 'og:url', content: path_to_url(current_page.url)} %meta{ property: 'og:url', content: path_to_url(current_page.url) }
%meta{property: 'og:description', content: current_page.data.description} %meta{ property: 'og:description', content: current_page.data.description }
= yield_content :og = yield_content :og
-# Icons -# Icons
%link{rel: 'canonical', href: path_to_url(current_page.url)} %link{ rel: 'canonical', href: path_to_url(current_page.url) }
%title= current_page.data.title %title= current_page.data.title
= stylesheet_link_tag '//fonts.googleapis.com/css?family=Carrois+Gothic|Source+Code+Pro:400,700'
= stylesheet_link_tag 'application'
:javascript %link{ rel: "stylesheet", href: "https://fonts.googleapis.com/css?family=Muli:400,700" }
try{Typekit.load();}catch(e){} = stylesheet_link_tag '//fonts.googleapis.com/css?family=Source+Code+Pro:400,700'
= stylesheet_link_tag 'application'
= javascript_include_tag 'all'
%body %body
%article %article
%header{role: "banner"} %header{ role: "banner" }
%nav.locales{role: "navigation"} = image_tag "keep-a-changelog-mark.svg", width: 100, class: "mark"
%ul %nav.locales{ role: "navigation" }
%select
- $languages.each do |language| - $languages.each do |language|
%li= link_to "#{language.last} [#{language.first}]", "/#{language.first}/", - selected = current_page.metadata[:page][:language] == language.first
{ rel: "alternate", lang: "#{language.first}", hreflang: "#{language.first}" } %option{ selected: selected, label: language.last[:name], value: language.first }
.main{role: "main"}= yield .main{ role: "main" }
- if current_page.metadata[:page][:version] != $last_version
- code = current_page.metadata[:page][:language]
- versions = Dir.entries("source/#{code}") - %w[. ..]
- if versions.include?($last_version)
= link_to "Version #{$last_version}", "#{code}/#{$last_version}"
- else
- if $languages[code][:notice]
%p.last-version-notice= $languages[code][:notice]
- else
%p
The latest version (#{$last_version}) is not yet available in
this language but
= link_to "you can read it in English", "/en/#{$last_version}"
for now and
= link_to "help translate ", "https://github.com/olivierlacan/keep-a-changelog/issues"
it.
%footer.clearfix{role: "banner"} = yield
%p.license
This project is %footer.footer.clearfix{ role: "banner" }
#{link_to "MIT Licensed", "http://choosealicense.com/licenses/mit/"}. = image_tag "keep-a-changelog-mark.svg", width: 30, class: "mark"
%p.about
#{link_to "Typed", "https://github.com/olivierlacan/keep-a-changelog/"} %p.about
with trepidation by This project is
#{link_to "Olivier Lacan", "http://olivierlacan.com/"}. = link_to "MIT Licensed", "http://choosealicense.com/licenses/mit/"
\ //
= link_to "Created & maintained", "https://github.com/olivierlacan/keep-a-changelog/"
by
= link_to "Olivier Lacan", "http://olivierlacan.com/"
\ //
Designed by
= link_to "Tyler Fortune", "http://tylerfortune.me/"
- unless config.gauges_id.blank? - unless config.gauges_id.blank?
:javascript :javascript

View File

@ -0,0 +1,144 @@
---
description: Prowadź Changelog
title: Prowadź Changelog
language: pl-PL
version: 0.3.0
---
:markdown
# Prowadź CHANGELOG
## Nie pozwól, by twoi znajomi wklejali logi gita do CHANGELOGów™
Wersja **#{current_page.metadata[:page][:version]}**
### Czym jest changelog?
Changelog, inaczej rejestr zmian lub historia zmian, to plik zawierający chronologicznie uporządkowaną listę istotnych zmian dla każdej wersji projektu.
<pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
### Co jest celem prowadzenia changelogu?
Changelog pomaga użytkownikom zrozumieć, jakie znaczące zmiany zostały wprowadzone w każdej wersji projektu.
### Dlaczego miałoby mi zależeć?
Ponieważ narzędzia informatyczne są dla ludzi. Jeśli ci nie zależy,
dlaczego przyczyniasz się do powstawania otwartego oprogramowania (open source)?
Rozmawiałem na podcaście ["The Changelog" z Adamem Stacoviakiem i Jerodem Santo][thechangelog]
(odpowiednia nazwa, prawda?) o tym, dlaczego osobom wspierającym otwarte programowanie powinno zależeć,
oraz o celach samego projektu. Jeśli masz chwilę (1:06), zapraszam do posłuchania - warto.
### Co składa się na dobry changelog?
Cieszę się, że zapytałeś.
Dobry changelog trzyma się następujących zasad:
- Jest stworzony dla ludzi, nie maszyn, więc liczy się czytelność.
- Prostota dodawania linków do każdego rozdziału (dlatego używa się Markdown zamiast prostego tekstu).
- Jeden podrozdział dla każdej wersji.
- Wyszczególniaj wydania w odwrotnym porządku chronologicznym (najnowsza na górze).
- Wszystkie daty zapisuj w formacie `YYYY-MM-DD`. (Przykład: `2012-06-02` dla `2 czerwca 2012 r.`). To [rozsądny](http://xkcd.com/1179/), niezależny od języka międzynarodowy format.
- Zawsze określaj, czy projekt jest zgodny z [Semantycznym Wersjonowaniem][semver].
- Każda wersja powinna:
- Zawierać datę w wyżej wymienionym formacie.
- Grupować zmiany w celu opisu ich wpływu na projekt, w następujący sposób:
- `Added` dla nowych funkcji.
- `Changed` dla zmian w istniejącej funkcjonalności.
- `Deprecated` (przestarzałe) dla uprzednio stabilnych funkcji, które zostaną usunięte w przyszłych wydaniach projektu.
- `Removed` dla przestarzałych funkcji usuniętych w bieżącej wersji.
- `Fixed` dla poprawionych błędów (bugów).
- `Security` w celu poinformowania użytkowników o zalecanej aktualizacji naprawiającej luki bezpieczeństwa.
### Jak mogę zminimalizować wysiłek wkładany w prowadzenie changelogu?
Zawsze umieszczaj rozdział `"Unreleased"` na szczycie dokumentu, w celu śledzenia wszelkich zmian.
Ta praktyka ma dwa cele:
- Użytkownicy widzą, jakich zmian mogą się spodziewać w nadchodzących wydaniach.
- W momencie aktualizacji, musisz jedynie zastąpić `"Unreleased"` wersją projektu oraz dodać nowy nagłówek `"Unreleased"` na samej górze.
### Co sprawia, że jednorożce płaczą?
Dobrze... zabierzmy się za to.
- **Wrzucanie logów diff z zamieszczonymi zmianami.** Po prostu tego nie rób. Nikomu tym nie pomagasz.
- **Niewyszczególnianie przestarzałych funkcji.** Użytkownik powinien zostać wyraźnie poinformowany, że coś przestanie działać po aktualizacji.
- **Daty w formatach regionalnych.** W USA ludzie zapisują miesiąc na samym początku daty ("06-02-2012" dla 2 czerwca 2012 r.,
co nie ma *najmniejszego* sensu), podczas gdy gdzie indziej wiele osób pisze "2 czerwiec 2012", jednak wymawia to w inny sposób.
"2012-06-02" to logiczny format zapisywany od największej, do najmniejszej wartości oraz nie pokrywa się z innymi formatami w niejednoznaczny sposób.
Jest to jednocześnie [standard ISO](http://www.iso.org/iso/home/standards/iso8601.htm). To wszystko sprawia, że jest to rekomendowany format zapisywania daty w changelogach.
To jeszcze nie koniec. Pomóż mi zebrać wszystkie łzy jednorożców [zgłaszając problem][issues] lub wprowadzając zmianę poprzez pull request.
### Czy istnieje standardowy format changelogu?
Niestety nie, ale spokojnie. Wiem, że spieszysz wkleić link do tego przewodnika stylu changelogu GNU, czy do dwóch paragrafów "wytycznych" GNU NEWS.
Przewodnik stylu GNU to dobry, ale niestety naiwny początek. Nie ma nic złego w byciu naiwnym, ale gdy ludzie potrzebują wytycznych, bycie naiwnym rzadko pomaga.
Szczególnie, gdy istnieje wiele sytuacji i szczególnych przypadków z którymi trzeba się zmierzyć.
Mam nadzieję, że ten projekt zostanie uznany [lepszym standardem pliku CHANGELOG][CHANGELOG].
Nie uważam, że status quo jest wystarczające i myślę, że jako społeczność, możemy stworzyć lepsze konwencje,
jeśli spróbujemy zastosować dobre praktyki stosowane w prawdziwych projektach informatycznych.
Proszę, zapoznaj się z projektem i pamiętaj, że [dyskusja i sugestie są zawsze mile widziane][issues]!
### Jak powinien być nazwany plik changelog?
Jeśli nie potrafisz wywnioskować z powyższego przykładu, `CHANGELOG.md` to do tej pory najlepsza konwencja.
Niektóre projekty również stosują `HISTORY.txt`, `HISTORY.md`, `History.md`, `NEWS.txt`,
`NEWS.md`, `News.txt`, `RELEASES.txt`, `RELEASE.md`, `releases.md`, itd.
Straszny bałagan. Wszystkie te nazwy sprawiają, że jeszcze ciężej jest odnaleźć ten plik.
### Dlaczego nie mielibyśmy po prostu stosować raportu `git log`?
Ponieważ logi typu diff są z natury zagmatwane. Nawet przy hipotetycznym projekcie stworzonym przez doskonałe istoty ludzkie, które nigdy nie popełniają literówek,
nigdy nie zapominają o zsynchronizowaniu nowo dodanych plików czy nigdy niczego nie pomijają podczas refaktoryzacji kodu, logi diff nie mogłyby zastąpić changelogu.
Celem `git commit` jest udokumentowanie jednego kroku w procesie, dzięki któremu kod ewoluuje z jednego stanu w kolejny. Celem changelogu jest udokumentowanie tych różnic pomiędzy stanami kodu, które są godne uwagi.
Różnica między changelogiem a logiem diff, tak samo jak różnica między dobrymi komentarzami a kodem, jest następująca: pierwsze opisuje *dlaczego*, drugie - *jak*.
### Czy changelog może być generowany automatycznie?
To nie takie proste, ponieważ ludzie stosują bardzo różne formaty oraz nazwy plików.
[Vandamme][vandamme] to gem Ruby stworzony przez ekipę [Gemnasium][gemnasium], parsujący changelogi wielu (ale nie wszystkich) projektów open source.
### Dlaczego czasem stosujesz pisownię "CHANGELOG", a czasem "changelog"?
"CHANGELOG" to nazwa samego pliku. Wygląda to dość głośno, ale taka jest historyczna konwencja przyjęta przez wiele projektów open source. Inne przykłady podobnych plików to [`README`][README], [`LICENSE`][LICENSE],
oraz [`CONTRIBUTING`][CONTRIBUTING].
Zapis wielkimi literami (dzięki któremu w starszych systemach operacyjnch pliki zostają umieszczone na szczycie listy) ma na celu zwrócenie na nie uwagi.
Jako że są to ważne informacje dotyczące projektu, mogą być one użyteczne dla każdego, kto zamierza korzystać lub wnieść weń wkład. Ida ta zbliżona jest do [odznaczeń przy projektach open source][shields].
Gdy stosuję pisownię "changelog", mówię o samej funkcji tego pliku: rejestrowaniu zmian.
### A co z błędnymi wersjami (yanked)?
Są to wersje opublikowane błędnie, czyli takie, które musiały zostać wycofane ze względu na poważny błąd lub lukę bezpieczeństwa. Często takie wersje projektu nie pojawiają się nawet w changelogu, a powinny.
Oto jak taka wersja powinna wyglądać:
`## 0.0.5 - 2014-12-13 [YANKED]`
Tag `[YANKED]` jest celowo zapisany wielkimi literami. Ważne jest, by został on dostrzeżony. Dzięki temu, że jest ujęty w nawias, może być z łatwością generowany automatycznie.
### Czy powinno się kiedykolwiek poprawiać changelog?
Oczywiście. Zawsze istnieją powody, by ulepszyć changelog. Często zdarza mi się edytować changelogi w projektach open source w których pominięto udokumentowanie istotnych zmian.
Może się również zdarzyć, że odkryjesz, iż podczas przygotowywania notatek dla wersji projektu, zapomniałeś udokumentować istotną zmianę, która ma wpływ na działanie aplikacji.
Ważne jest, by zaktualizować changelog szczególnie jeśli jest to zmiana, która w istotny sposób wpływa na kompatybilność aplikacji.
### Jak mogę wnieść wkład w projekt?
Ten dokument to nie jedna i jedyna **prawda**; to moja starannie sformułowana opinia wraz z informacją i przykładami które zebrałem.
Pomimo tego, że prowadzę właściwy [CHANGELOG][] na [GitHubie][gh], celowo nie stworzyłem poprawnego *releasu* czy jasno sprecyzowanych wytycznych (tak jak np. na [SemVer.org][semver]).
Chcę, by nasza społeczność uzgodniła jak CHANGELOG ma wyglądać. Wierzę, że dyskusja jest niezbędna do osiągnięcia końcowego rezultatu.
Więc proszę, [**dołącz do projektu**][gh].
[CHANGELOG]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CHANGELOG.md
[CONTRIBUTING]: https://github.com/olivierlacan/keep-a-changelog/blob/master/CONTRIBUTING.md
[LICENSE]: https://github.com/olivierlacan/keep-a-changelog/blob/master/LICENSE
[README]: https://github.com/olivierlacan/keep-a-changelog/blob/master/README.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/

View File

@ -18,7 +18,7 @@ version: 0.3.0
cronologicamente, de mudanças significativas para cada versão de um projeto cronologicamente, de mudanças significativas para cada versão de um projeto
*open source*. *open source*.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown :markdown
### Para que serve um *changelog*? ### Para que serve um *changelog*?
@ -165,7 +165,7 @@ version: 0.3.0
aparecem em *changelogs*. Deveriam. É assim que você deve exibi-las: aparecem em *changelogs*. Deveriam. É assim que você deve exibi-las:
`## 0.0.5 - 2014-12-13 [YANKED]` `## 0.0.5 - 2014-12-13 [YANKED]`
A tag `[YANKED]`/`[REMOVIDA]` é chamativa por uma razão. É importante que A tag `[YANKED]`/`[REMOVIDA]` é chamativa por uma razão. É importante que
as pessoas a notem. Além disso, já que é cercada por colchetes, é mais as pessoas a notem. Além disso, já que é cercada por colchetes, é mais
fácil detectá-la programaticamente. fácil detectá-la programaticamente.

View File

@ -18,9 +18,8 @@ version: 0.3.0
хронологическом порядке список значимых изменений для каждой версии проекта с хронологическом порядке список значимых изменений для каждой версии проекта с
открытым исходным кодом. открытым исходным кодом.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Для чего нужен лог изменений? ### Для чего нужен лог изменений?
Чтобы пользователи и контрибьюторы могли с меньшими усилиями точно Чтобы пользователи и контрибьюторы могли с меньшими усилиями точно

View File

@ -16,9 +16,8 @@ version: 0.3.0
Dnevnik sprememb je datoteka, ki vsebuje kuriran, kronološko urejen Dnevnik sprememb je datoteka, ki vsebuje kuriran, kronološko urejen
seznam opaznih sprememb za vsako verzijo projekta. seznam opaznih sprememb za vsako verzijo projekta.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Kaj je smisel dnevnika sprememb? ### Kaj je smisel dnevnika sprememb?
Za poenostavitev, da uporabniki in prispevajoči sodelavci natančno vidijo, katere Za poenostavitev, da uporabniki in prispevajoči sodelavci natančno vidijo, katere
opazne spremembe so bile narejene med vsako izdajo (ali verzijo) projekta. opazne spremembe so bile narejene med vsako izdajo (ali verzijo) projekta.

View File

@ -16,9 +16,8 @@ version: 0.3.0
En ändringslogg är en fil innehållandes en sammanfattad, kronologiskt ordnad En ändringslogg är en fil innehållandes en sammanfattad, kronologiskt ordnad
lista över ändringar för varje version av ett projekt. lista över ändringar för varje version av ett projekt.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Vad är meningen med en ändringslogg? ### Vad är meningen med en ändringslogg?
För att göra det enkelt för användare och medarbetare att se exakt vilka För att göra det enkelt för användare och medarbetare att se exakt vilka
viktiga ändringar som har gjorts mellan varje utgåva (eller version) av projektet. viktiga ändringar som har gjorts mellan varje utgåva (eller version) av projektet.

View File

@ -14,9 +14,8 @@ version: 0.3.0
Değişiklik kayıtları bir proje için özel olarak hazırlanmış, tarihsel sıralamayla Değişiklik kayıtları bir proje için özel olarak hazırlanmış, tarihsel sıralamayla
sıralanmış, önemli değişikliklerin bir bütünüdür. sıralanmış, önemli değişikliklerin bir bütünüdür.
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### Değişikliklerin kayıtlarını tutmanın anlamı ne? ### Değişikliklerin kayıtlarını tutmanın anlamı ne?
Bir projenin kullanıcılarının ya da katılımcılarının, dağıtımlar (ya da sürümler) Bir projenin kullanıcılarının ya da katılımcılarının, dağıtımlar (ya da sürümler)
arasındaki tam olarak hangi önemli değişikliklerin olduğunu takip edebilmelerini sağlar. arasındaki tam olarak hangi önemli değişikliklerin olduğunu takip edebilmelerini sağlar.
@ -90,7 +89,7 @@ version: 0.3.0
Mevcut durumun çok iyi olduğunu düşünmüyorum, ve topluluk olarak, gerçek yazılım Mevcut durumun çok iyi olduğunu düşünmüyorum, ve topluluk olarak, gerçek yazılım
projelerinden iyi pratikleri toplayarak bundan daha iyisini yapabiliriz. Lütfen projelerinden iyi pratikleri toplayarak bundan daha iyisini yapabiliriz. Lütfen
etrafa bir göz gezdirin ve unutmayın [gelişme yolunda tartışmalara ve önerilere her zaman açığız][issues]! etrafa bir göz gezdirin ve unutmayın [gelişme yolunda tartışmalara ve önerilere her zaman açığız][issues]!
### Değişiklik kayıtlarının dosya ismi ne olmalı? ### Değişiklik kayıtlarının dosya ismi ne olmalı?
Eh, üstteki örnekten çıkartamadıysanız eğer, `CHANGELOG.md` şu ana kadarki Eh, üstteki örnekten çıkartamadıysanız eğer, `CHANGELOG.md` şu ana kadarki
en iyi çözüm. en iyi çözüm.
@ -159,7 +158,7 @@ version: 0.3.0
[GitHub repo][gh]sunda güncel bir [CHANGELOG][] sağlıyor olsam da, özellikle [GitHub repo][gh]sunda güncel bir [CHANGELOG][] sağlıyor olsam da, özellikle
bir *sürüm* ya da ([SemVer.org][semver] benzeri) takip edilecek kurallar bir *sürüm* ya da ([SemVer.org][semver] benzeri) takip edilecek kurallar
oluşturmadım. oluşturmadım.
Bunu istememin sebebi topluluğun ortak bir paydada buluşmasını istememdir. Bunu istememin sebebi topluluğun ortak bir paydada buluşmasını istememdir.
İnanıyorum ki tartışmanın kendisi de sonucu kadar önemli. İnanıyorum ki tartışmanın kendisi de sonucu kadar önemli.

View File

@ -17,9 +17,8 @@ version: 0.3.0
这个列表记录所有版本的重大变动。 这个列表记录所有版本的重大变动。
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### 为何要提供更新日志? ### 为何要提供更新日志?
为了让用户和开发人员更好知道每一个版本有哪些区别。 为了让用户和开发人员更好知道每一个版本有哪些区别。

View File

@ -17,9 +17,8 @@ version: 0.3.0
這個列表記錄所有版本的重大變動。 這個列表記錄所有版本的重大變動。
%pre.changelog= File.read("CHANGELOG.md") <pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
:markdown
### 為何要提供更新日誌? ### 為何要提供更新日誌?
為了讓用戶和開發人員更好知道每一個版本有哪些區別。 為了讓用戶和開發人員更好知道每一個版本有哪些區別。