mirror of
https://github.com/olivierlacan/keep-a-changelog.git
synced 2025-08-27 12:48:13 +02:00
It’s really not worth the double filter call and I’m sure I can find some way to use Middleman to extract this into a method.
187 lines
9.1 KiB
Plaintext
187 lines
9.1 KiB
Plaintext
---
|
|
description: Håll en ändringslogg
|
|
title: Håll en ändringslogg
|
|
language: sv
|
|
version: 0.3.0
|
|
---
|
|
|
|
:markdown
|
|
# Håll en CHANGELOG
|
|
|
|
## Låt inte dina vänner slänga in en git logs i CHANGELOG™
|
|
|
|
Version **#{current_page.metadata[:page][:version]}**
|
|
|
|
### Vad är en ändringslogg?
|
|
En ändringslogg är en fil innehållandes en sammanfattad, kronologiskt ordnad
|
|
lista över ändringar för varje version av ett projekt.
|
|
|
|
<pre class="changelog">#{File.read("CHANGELOG.md")}</pre>
|
|
|
|
### Vad är meningen med en ändringslogg?
|
|
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.
|
|
|
|
### Varför ska jag bry mig?
|
|
Därför att mjukvaruverktyg är för människor. Om du inte bryr dig, varför
|
|
bidrar du till öppen källkod? Visst finns det väl någon del i din vackra
|
|
hjärna som bryr sig.
|
|
|
|
Jag [pratade med Adam Stacoviak och Jerod Santo från podcasten The Changelog][thechangelog]
|
|
(passande, eller hur?) om varför ansvariga och bidragsgivare bör bry sig,
|
|
och motiveringen bakom detta projekt.
|
|
Om du kan avvara lite tid (1:06), rekommenderar jag att lyssna på det.
|
|
|
|
### Vad gör en bra ändringslogg?
|
|
Jag är glad att du frågade.
|
|
|
|
En bra ändringslogg håller sig till dessa principer:
|
|
|
|
- Den är skapad för människor, inte maskiner, så läsbarhet är avgörande.
|
|
- Lätt att länka till valfri sektion (därav Markdown framför klartext).
|
|
- En undersektion per version.
|
|
- Listar utgåvor i omvänd kronologisk ordning (nyast högst upp).
|
|
- Anger alla datum på formatet `YYYY-MM-DD`
|
|
(exempel: `2012-06-02` för 2:a juni 2012). Det är internationellt,
|
|
[förnuftigt](http://xkcd.com/1179/) och språkoberoende.
|
|
- Anger uttryckligen om projektet följer [Semantisk versionshantering][SemVer].
|
|
- Varje version bör:
|
|
- Ange datum då utgåvan släpptes på formatet angivet ovan.
|
|
- Gruppera ändringar för att beskriva deras inverkan på projektet enligt följande:
|
|
- `Added` för nya funktioner.
|
|
- `Changed` för ändringar på existerande funktionalitet.
|
|
- `Deprecated` för tidigare stabila funktioner som tas bort i nästa utgåva.
|
|
- `Removed` för funktioner tidigare markerade som `Deprecated` som tas bort i denna version.
|
|
- `Fixed` för buggfixar.
|
|
- `Security` för att uppmana användare att uppgradera vid fall av sårbarheter.
|
|
|
|
### Hur kan jag minimera den insats som krävs?
|
|
Ha alltid en sektion kallad `"Unreleased"` högst upp för att hålla reda på
|
|
alla ändringar.
|
|
|
|
Detta tjänar två syften:
|
|
|
|
- Folk kan se vilka ändringar som kan förväntas i kommande utgåvor
|
|
- Vid lansering behöver du bara ändra `"Unreleased"` till versionsnumret
|
|
och lägga till en ny `"Unreleased"` högst upp.
|
|
|
|
### Vad får änglarna att gråta?
|
|
Okej...låt oss gå genom det.
|
|
|
|
- **Dumpa ut en diff från commit-loggen.** Gör helt enkelt inte så, du hjälper ingen.
|
|
- **Inte betona `deprecations`.** När användare uppgraderar från en version till
|
|
en annan ska det vara smärtsamt uppenbart om något förväntas gå sönder.
|
|
- **Datum i region-specifikt format.** I USA lägger folk månaden först
|
|
("06-02-2012" för 2:a juni 2012, vilket bara är *konstigt*), medan många
|
|
andra runt om i världen skriver "2 June 2012" men uttalar det annorlunda.
|
|
"2012-06-02" fungerar logiskt från största till minsta, inte överlappar på ett
|
|
tvetydligt sätt med andra datumformat, och det är en
|
|
[ISO-standard](http://www.iso.org/iso/home/standards/iso8601.htm). Dessutom
|
|
är det rekommenderat datumformat för ändringsloggar.
|
|
|
|
|
|
Det finns mer. Hjälp mig att samla tårarna från änglarna genom att
|
|
[öppna en issue][issues]
|
|
eller en pull-förfrågan.
|
|
|
|
### Finns det ett standardformat på ändringsloggar?
|
|
Tyvärr inte. Men lugn. Jag vet att du frustrerad kommer att rusa iväg för att hitta
|
|
den där länken till GNU:s format för ändringsloggar, eller den två stycken långa
|
|
GNU NEWS-filen med "guideline". Stilguiden från GNU är en bra start, men den är
|
|
tyvärr allt för naiv. Det är inget fel med att vara naiv, men när människor
|
|
behöver vägledning är det inte speciellt hjälpsamt. Speciellt när det är många
|
|
olika situationer och specialfall att hantera.
|
|
|
|
Detta projekt [innehåller vad jag hoppas kommer att bli en bättre filkonvention
|
|
för CHANGELOG][CHANGELOG]. Jag tror inte att status quo är tillräckligt bra,
|
|
och jag tror att vi tillsammans kan komma fram till en bättre konvention
|
|
om vi försöker att plocka ut bra erfarenheter från riktiga mjukvaruprojekt.
|
|
Titta runt och kom ihåg att [diskussioner och förbättringsförslag är välkomna][issues]!
|
|
|
|
### Vad bör filen med ändringsloggen heta?
|
|
Tja, om du inte kan lista ut det från exemplen ovan är `CHANGELOG.md`
|
|
den bästa konvention hittills.
|
|
|
|
En del projekt använder också `HISTORY.txt`, `HISTORY.md`, `History.md`, `NEWS.txt`,
|
|
`NEWS.md`, `News.txt`, `RELEASES.txt`, `RELEASE.md`, `releases.md`, etc.
|
|
|
|
Det är en verklig röra. Alla dessa namn gör det bara svårare för människor att hitta.
|
|
|
|
### Varför kan folk inte bara använda en diff från `git log`?
|
|
Eftersom logg-diffar av naturen är fulla med brus. Det kan inte ens användas
|
|
för att göra en lämplig ändringslogg ens i ett hypotetiskt projekt drivet av
|
|
perfekta människor som aldrig skriver fel, aldrig glömmer att checka in nya filer
|
|
eller aldrig glömmer någon del av en refaktorering. Syftet med en commit är att
|
|
dokumentera ett enskilt steg i processen då koden utvecklas från ett tillstånd till
|
|
ett annat. Syftet med en ändringslogg är att dokumentera de anmärkningsvärda
|
|
skillnaderna mellan dessa tillstånd.
|
|
|
|
På samma sätt som det är skillnad mellan bra kommentarer och själva koden,
|
|
är det skillnad mellan ändringsloggen och commit-loggen:
|
|
en beskriver *varför* och den andra *hur*.
|
|
|
|
### Kan ändringsloggar bli automatiskt tolkade?
|
|
Det är svårt då människor följer vitt olika format och filnamn.
|
|
|
|
[Vandamme][vandamme] är en Ruby gem
|
|
skapad av gruppen bakom [Gemnasium][gemnasium] som tolkar många (men inte alla)
|
|
ändringsloggar för öppen källkod.
|
|
|
|
### Varför alternerar du mellan att skriva det som "CHANGELOG" och "ändringslogg"?
|
|
"CHANGELOG" är namnet på själva filen. Det sticker ut lite, men det är en
|
|
historisk konvention använt i många öppna källkodsprojekt. Andra
|
|
exempel på liknande filer är [`README`][README], [`LICENSE`][LICENSE]
|
|
och [`CONTRIBUTING`][CONTRIBUTING].
|
|
|
|
De stora bokstäverna i namnen (som gjorde att de i äldre operativsystem
|
|
hamnade högst upp) används för att dra uppmärksamhet till dem. Då de är
|
|
viktig metadata om projektet borde de vara användbara för att alla som
|
|
vill använda eller bidra till det, ungefär som [open source project badges][shields].
|
|
|
|
När jag refererar till "ändringslogg" pratar jag om syftet med denna fil:
|
|
att logga ändringar.
|
|
|
|
### Hur är det med brådskande utgåvor ("yanked")?
|
|
Brådskande utgåvor är versioner som måste släppas p.g.a. alvarliga
|
|
buggar eller säkerhetsproblem. Oftast brukar dessa versioner inte ens
|
|
finnas med i ändringsloggarna. De borde det. Så här borde du visa dem:
|
|
|
|
`## 0.0.5 - 2014-12-13 [YANKED]`
|
|
|
|
Taggen `[YANKED]` står ut av en anledning, det är viktigt för människor
|
|
att se den. Då den är omsluten med hakparenteser är det också lättare
|
|
för ett program att tolka.
|
|
|
|
### Borde du någonsin förändra en ändringslogg?
|
|
Självklart. Det finns alltid en bra anlending att förbättra en ändringslogg.
|
|
Jag öppnar regelbundet pull requests för att lägga till saknade utgåvor
|
|
för öppna källkodsprojekt som inte tar hand om sin ändringslogg.
|
|
|
|
Det kan också hända att du upptäcker att du glömt att ta upp en icke
|
|
bakåtkompatibel förändring i en version. I sådana fall är det självklart
|
|
viktigt att uppdatera din ändringslogg.
|
|
|
|
### Hur kan jag bidra?
|
|
Detta dokument är inte **sanningen**, det är en noga övervägd åsikt
|
|
tillsammans med information och exempel jag har samlat på mig.
|
|
Även om jag tillhandahåller en [CHANGELOG][] i min [GitHub repo][gh],
|
|
har jag avsiktligt inte skapat en egentlig *utgåva* eller en tydlig lista
|
|
med regler att följa (som t.ex. [SemVer.org][semver] gör).
|
|
|
|
Detta beror på att jag vill att vår gemenskap ska nå samförstånd. Jag
|
|
tror att diskussionen är lika viktig som slutresultatet.
|
|
|
|
Så välkomna att [**diskutera**][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/
|