Vodite changelog
Ne dajte prijateljima da trpaju git logove u changelogove.
# 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
Što je changelog?
Changelog je datoteka koja sadrži uređeni kronološki poredani popis značajnih promjena unutar svake verzije projekta.
Zašto voditi changelog?
Kako bi korisnici i suradnici detaljno vidjeli značajne promjene među pojedinim izdanjima (ili verzijama) projekta.
Kome treba changelog?
Ljudima. Bilo da su uobičajeni korisnici ili programeri, krajnji su korisnici softvera ljudska bića kojima je stalo do toga od čega je sastavljen. Kada se softver mijenja, korisnici žele znati kako i zašto.
Kako kreirati dobar changelog?
Glavna načela
- Changelogs služi ljudima, ne strojevima.
- Potrebno je stvoriti unos za svaku verziju.
- Slične promjene potrebno je grupirati.
- Verzije i sekcije trebaju imati poveznicu.
- Posljednja verzija treba biti na prvom mjestu.
- Datum izdavanja svake pojedine verzije treba biti vidljiv.
- Navesti prati li se Semantičko verzioniranje.
Vrste promjena
-
Added
za nove funkcionalnosti. -
Changed
za promjene u postojećim funkcionalnostima. -
Deprecated
za funkcionalnosti koje će se ukloniti u budućim verzijama. -
Removed
za uklonjene funkcionalnosti. -
Fixed
za ispravke bugova. -
Security
za slučaj sigurnosnih propusta.
Kako održavati changelog sa što manje napora?
Na vrh postavite Unreleased
sekciju gdje ćete navoditi nadolazeće promjene.
To radimo iz dva razloga:
- Korisnici mogu vidjeti promjene koje mogu očekivati u nadolazećim izdanjima
- Kod izdavanja nove verzije, moguće je
Unreleased
sekciju samo preimenovati u novo izdanje.
Može li changelog biti loš?
Naravno. Postoji nekoliko slučajeva u kojima changelog može biti beskoristan.
Commit log diffovi
Korištenje commit log diffova u svrhu changeloga nije dobra ideja: puni su šuma. Npr. merge commitovi, commitovi s nejasnim naslovima, promjene u dokumentaciji i sl.
Svrha commita je da bilježi korake u razvoju izvornog koda. U nekim projektima se comittovi čiste, no ponekad i ne.
Svrha unosa u changelogu je da bilježi značajne razlike, a često kroz više commitova i jasno ih prenese krajnjem korisniku.
Ignoriranje uklonjenih funkcionalnosti
Kad korisnici nadograde softver na noviju verziju, treba biti potpuno jasno da postoji mogućnost da će se neki dio pokvariti. Softver treba biti moguće nadograditi na verziju koja će navesti funkcionalnosti koje trebaju biti uklonjene, uklanja takve te se kasnije može nadograditi na verziju gdje su već uklonjene.
U najmanju ruku, potrebno je u changelogu navoditi funkcionalnosti koje će biti uklonjene, funkcionalnosti koje su uklonjene i promjene koje će utjecati na rad softvera (breaking change).
Nejasni datumi
Regionalni formati datuma variraju diljem svijeta, pa je često teško pronaći format datuma koji će odgovarati svima. Prednost datuma u formatu 2017-07-17
je to što je poredan od veće prema manjoj jedinici: godina, mjesec, dan. Ovaj je format također teško zamijeniti s drugim regionalnim formatima, za razliku od nekih koji, primjerice mijenjaju poziciju oznake mjeseca i dana. Iz tog razloga, a i zbog toga što je navedeni format ISO standard, taj se format preporuča za changelog unose.
Česta pitanja
Postoji li standardni changelog format?
Zapravo ne. Postoji GNU changelog stilski priručnik, i GNU NEWS file "priručnik od dva odlomka". Nijedan nije adekvatan ni dovoljan.
Cilj je ovoga projekta kvalitetniji changelog standard. Nastao je prikupljanjem primjera dobra prakse u open source zajednici.
Konstruktivna kritika, raprave i prijedlozi za poboljšanje su dobrodošli.
Kako nazvati changelog datoteku?
Dajemo joj naziv CHANGELOG.md
. Neki projekti još koriste HISTORY
, NEWS
ili RELEASES
.
Iako može djelovati da naziv changelog datoteke i nije toliko bitan, čemu otežavati korisnicima da dođu do informacije o promjenama?
Što s GitHub Releases?
To je ozbiljna inicijativa. Releases se mogu koristiti kako bi git oznake (npr. git oznaka v1.0.0
) pretvorili u opširnije bilješke o izdanju, upisujući ih ručno ili pak preuzimajući anotirane git oznake i pretvarajući ih u unose.
GitHub Releases stvara statični changelog vidljiv korisnicima unutar GitHub repozitorija. Moguće ih je urediti u format koji bi odgovarao Vodite changelog formatu, no često je nešto opširniji.
Trenutna GitHub releases verzija i nije baš sasvim vidljiva korisnicima, za razliku od uobičajenih datoteka označenih velikim slovima (README
, CONTRIBUTING
, itd.). Još je jedan manji problem što trenutno sučelje ne nudi poveznice na commit logove između izdanja.
Mogu li changelogovi automatski parsati?
Teže, jer se koriste vrlo različiti formati, kao i nazivi datoteka.
Vandamme je Ruby gem koji je kreirao Gemnasium tim i može parsati mnoge (ali ne sve) changeloge projekata otvorenog koda.
Što s povučenim izdanjima?
Povučena ili 'Yanked' izdanja su verzije koje su uklonjene zbog ozbiljnijeg buga ili sigurnosnog propusta. Takva se izdanja najčešće i ne pojavljuju u changelogu, iako bi trebala. Trebala bi biti navedena na sljedeći način:
## [0.0.5] - 2014-12-13 [YANKED]
[YANKED]
oznaka jasno je istaknuta s razlogom. Bitno je da ju je lako primijetiti. Buduće da je okružena zagradama, također ju je lakše parsati.
Je li potrebno prepravljati changelog?
Naravno. Često postoje dobri razlozi da bismo poboljšali changelog. Ja često otvaram pull requestove kako bih dodao nedostajuća izdanja projektima otvorenog koda, koji ne održavaju changeloge.
Moguće je, također da otkrijete, kako ste zaboravili navesti promjenu koja bi utjecala na rad (breaking change). U tom je slučaju, očito, vrlo bitno ažurirati changelog.
Kako doprinijeti?
Ovaj dokument nije Sveto Pismo; ovo je samo pažljivo razmotreno mišljenje, uz informacije i primjere koje sam skupio.
Razlog je tome to što želim da zajednica postigne konsenzus. Vjerujem, također, da je i sama rasprava bitna kao i krajnjni rezultat.
Zato, molimo uskočite.
Razgovori
Gostovao sam na The Changelog podcastu gdje sam pokušao objasniti zašto začetnici projekata i suradnici trebaju brinuti o changelogovima te motivaciji iza ovog projekta.