|
| 1 | +--- |
| 2 | +draft: false |
| 3 | +aliases: ["/pl/"] |
| 4 | +--- |
| 5 | + |
| 6 | +# Conventional Commits 1.0.0 |
| 7 | + |
| 8 | +## Podsumowanie |
| 9 | + |
| 10 | +Specyfikacja Conventional Commits to lekka konwencja dotycząca wiadomości commitów. |
| 11 | +Zapewnia prosty zestaw reguł do tworzenia przejrzystej historii commitów; |
| 12 | +co ułatwia budowanie narzędzi automatyzujących na jej podstawie. |
| 13 | +Ta konwencja współgra z [SemVer](http://semver.org), |
| 14 | +opisując funkcje, poprawki i breaking changes w wiadomościach commitów. |
| 15 | + |
| 16 | +Wiadomość commita powinna być zbudowana w następujący sposób: |
| 17 | + |
| 18 | +--- |
| 19 | + |
| 20 | +``` |
| 21 | +<type>[opcjonalny scope (zakres)]: <opis> |
| 22 | +
|
| 23 | +[opcjonalny body (treść)] |
| 24 | +
|
| 25 | +[opcjonalny footer (stopka)] |
| 26 | +``` |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +<br /> |
| 31 | +Commit zawiera następujące elementy strukturalne, aby przekazać intencję |
| 32 | +używającym Twojej biblioteki: |
| 33 | + |
| 34 | +1. **fix:** commit _typu_ `fix` naprawia błąd w kodzie (odpowiada [`PATCH`](http://semver.org/#summary) w Semantic Versioning). |
| 35 | +2. **feat:** commit _typu_ `feat` wprowadza nową funkcjonalność w kodzie (odpowiada [`MINOR`](http://semver.org/#summary) w Semantic Versioning). |
| 36 | +3. **BREAKING CHANGE:** commit, który posiada footer (stopkę) `BREAKING CHANGE:`, lub dodaje `!` po typie/scope (zakres), wprowadza zmianę, która może zmieniać użycie API - tzw. _breaking change_ (odpowiada [`MAJOR`](http://semver.org/#summary) w Semantic Versioning). BREAKING CHANGE może być częścią commita dowolnego _typu_. |
| 37 | +4. Dozwolone są _typy_ inne niż `fix:` i `feat:`, np. [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional) (bazujący na [Angular convention](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines)) zaleca `build:`, `chore:`, `ci:`, `docs:`, `style:`, `refactor:`, `perf:`, `test:` i inne. |
| 38 | +5. Dozwolone są footery (stopki) inne niż `BREAKING CHANGE: <opis>`, zgodne z [git trailer format](https://git-scm.com/docs/git-interpret-trailers). |
| 39 | + |
| 40 | +Dodatkowe typy nie są wspierane przez specyfikację Conventional Commits i nie mają wpływu na Semantic Versioning (chyba że zawierają BREAKING CHANGE). |
| 41 | +<br /><br /> |
| 42 | +Scope (zakres) może być dodany do typu commita, aby przekazać dodatkowy kontekst i jest umieszczany w nawiasach, np. `feat(parser): add ability to parse arrays`. |
| 43 | + |
| 44 | +## Przykłady |
| 45 | + |
| 46 | +### Commit message z opisem i footerm (stopką) BREAKING CHANGE |
| 47 | + |
| 48 | +``` |
| 49 | +feat: allow provided config object to extend other configs |
| 50 | +
|
| 51 | +BREAKING CHANGE: `extends` key in config file is now used for extending other config files |
| 52 | +``` |
| 53 | + |
| 54 | +### Commit message z `!` zwracającym uwagę na breaking change |
| 55 | + |
| 56 | +``` |
| 57 | +feat!: send an email to the customer when a product is shipped |
| 58 | +``` |
| 59 | + |
| 60 | +### Commit message ze scope (zakresem) i `!` zwracającym uwagę na breaking change |
| 61 | + |
| 62 | +``` |
| 63 | +feat(api)!: send an email to the customer when a product is shipped |
| 64 | +``` |
| 65 | + |
| 66 | +### Commit message z `!` i footerm (stopką) BREAKING CHANGE |
| 67 | + |
| 68 | +``` |
| 69 | +chore!: drop support for Node 6 |
| 70 | +
|
| 71 | +BREAKING CHANGE: use JavaScript features not available in Node 6. |
| 72 | +``` |
| 73 | + |
| 74 | +### Commit message bez body (treści) |
| 75 | + |
| 76 | +``` |
| 77 | +docs: correct spelling of CHANGELOG |
| 78 | +``` |
| 79 | + |
| 80 | +### Commit message ze scope (zakresem) |
| 81 | + |
| 82 | +``` |
| 83 | +feat(lang): add Polish language |
| 84 | +``` |
| 85 | + |
| 86 | +### Commit message z wielo-paragrafowym body (treścią) i wieloma footerami (stopkami) |
| 87 | + |
| 88 | +``` |
| 89 | +fix: prevent racing of requests |
| 90 | +
|
| 91 | +Introduce a request id and a reference to latest request. Dismiss |
| 92 | +incoming responses other than from latest request. |
| 93 | +
|
| 94 | +Remove timeouts which were used to mitigate the racing issue but are |
| 95 | +obsolete now. |
| 96 | +
|
| 97 | +Reviewed-by: Z |
| 98 | +Refs: #123 |
| 99 | +``` |
| 100 | + |
| 101 | +## Specyfikacja |
| 102 | + |
| 103 | +Słowa kluczowe „MUSI” („MUST”), „NIE MOŻE” („MUST NOT”), „WYMAGANY” („REQUIRED”), „BĘDZIE” („SHALL”), „NIE BĘDZIE” („SHALL NOT”), „POWINIEN” („SHOULD”), „NIE POWINIEN” („SHOULD NOT”), „ZALECANY” („RECOMMENDED”), „MOŻE” („MAY”) oraz „OPCJONALNY” („OPTIONAL”) w tym dokumencie należy interpretować zgodnie z [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). |
| 104 | + |
| 105 | +1. Commity MUSZĄ („MUST”) być poprzedzone typem, który składa się z rzeczownika, np. `feat`, `fix` itd., po którym może wystąpić OPCJONALNY („OPTIONAL”) scope, OPCJONALNY („OPTIONAL”) `!` oraz WYMAGANY („REQUIRED”) dwukropek i spacja. |
| 106 | +2. Typ `feat` MUSI („MUST”) być używany, gdy commit dodaje nową funkcjonalność do aplikacji lub biblioteki. |
| 107 | +3. Typ `fix` MUSI („MUST”) być używany, gdy commit reprezentuje poprawkę błędu w aplikacji. |
| 108 | +4. Scope (zakres) MOŻE („MAY”) być podany po typie. Scope (zakres) MUSI („MUST”) być rzeczownikiem opisującym część bazy kodu, ujętym w nawiasy, np. `fix(parser):` |
| 109 | +5. Opis MUSI („MUST”) natychmiast następować po dwukropku i spacji po prefiksie typu/scope (zakres). Opis to krótkie podsumowanie zmian w kodzie, np. _fix: array parsing issue when multiple spaces were contained in string_. |
| 110 | +6. Dłuższy body (treść) commita MOŻE („MAY”) być podany po krótkim opisie, dostarczając dodatkowych informacji o zmianach. Body (treść) MUSI („MUST”) zaczynać się jedną pustą linią po opisie. |
| 111 | +7. Body (treść) commita jest dowolne i MOŻE („MAY”) składać się z dowolnej liczby akapitów oddzielonych nową linią. |
| 112 | +8. Jeden lub więcej footerów (stopek) MOŻE („MAY”) być podanych jedną pustą linią po body (treści). Każdy footer (stopka) MUSI („MUST”) składać się z tokena słownego, po którym następuje separator `:<spacja>` lub `<spacja>#`, a następnie wartość tekstowa (inspirowane [git trailer convention](https://git-scm.com/docs/git-interpret-trailers)). |
| 113 | +9. Token footera (stopki) MUSI („MUST”) używać `-` zamiast spacji, np. `Acked-by` (to pomaga odróżnić sekcję footerów (stopek) od wielo-paragrafowego body (treści)). Wyjątkiem jest `BREAKING CHANGE`, który MOŻE („MAY”) być również użyty jako token. |
| 114 | +10. Wartość footera (stopki) MOŻE („MAY”) zawierać spacje i nowe linie, a parsowanie MUSI („MUST”) zakończyć się, gdy napotkany zostanie kolejny poprawny token/separator footera (stopki). |
| 115 | +11. Breaking changes MUSZĄ („MUST”) być wskazane w prefiksie typu/scope commita lub jako wpis w footerze. |
| 116 | +12. Jeśli breaking change jest podany jako footer, MUSI („MUST”) składać się z wielkich liter BREAKING CHANGE, po których następuje dwukropek, spacja i opis, np. _BREAKING CHANGE: environment variables now take precedence over config files_. |
| 117 | +13. Jeśli breaking change jest podany w prefiksie typu/scope, MUSI („MUST”) być oznaczony przez `!` bezpośrednio przed `:`. Jeśli użyto `!`, `BREAKING CHANGE:` MOŻE („MAY”) być pominięty w sekcji footer, a opis commita POWINIEN („SHOULD”) opisywać breaking change. |
| 118 | +14. Typy inne niż `feat` i `fix` MOGĄ („MAY”) być używane w wiadomościach commitów, np. _docs: update ref docs._ |
| 119 | +15. Jednostki informacji składające się na Conventional Commits NIE POWINNY („SHOULD NOT”) być traktowane jako rozróżniające wielkość liter przez implementatorów, z wyjątkiem BREAKING CHANGE, który MUSI („MUST”) być wielkimi literami. |
| 120 | +16. BREAKING-CHANGE MUSI („MUST”) być synonimem BREAKING CHANGE, gdy jest używany jako token w footerze. |
| 121 | + |
| 122 | +## Dlaczego warto używać Conventional Commits |
| 123 | + |
| 124 | +* Automatyczne generowanie listy zmian (CHANGELOG). |
| 125 | +* Automatyczne podbicia wersji semantycznej (na podstawie typów commitów). |
| 126 | +* Komunikowanie charakteru zmian współpracownikom, społeczności i innym zainteresowanym. |
| 127 | +* Wyzwalanie procesów budowania i publikacji. |
| 128 | +* Ułatwienie osobom z zewnątrz kontrybuowania do projektu poprzez bardziej uporządkowaną historię commitów. |
| 129 | + |
| 130 | +## FAQ |
| 131 | + |
| 132 | +### Jak postępować z wiadomościami commitów w fazie początkowego rozwoju? |
| 133 | + |
| 134 | +Zalecamy traktować projekt tak, jakby był już publicznie wydany. Zazwyczaj _ktoś_ (nawet jeśli to tylko inni programiści) korzysta z Twojego oprogramowania i chce wiedzieć, co zostało naprawione, co się zmieniło, a co może nie działać. |
| 135 | + |
| 136 | +### Czy typy w tytule commita powinny być pisane wielkimi czy małymi literami? |
| 137 | + |
| 138 | +Możesz używać zarówno wielkich, jak i małych liter, ale najważniejsza jest konsekwencja. |
| 139 | + |
| 140 | +### Co zrobić, jeśli commit pasuje do więcej niż jednego typu? |
| 141 | + |
| 142 | +Jeśli to możliwe, rozdziel zmiany na osobne commity. Jedną z zalet Conventional Commits jest zachęcanie do bardziej uporządkowanej historii commitów i pull requestów. |
| 143 | + |
| 144 | +### Czy to nie zniechęca do szybkiego rozwoju i iteracji? |
| 145 | + |
| 146 | +To nie zniechęca do szybkiego rozwoju, ale do nieuporządkowanego działania. W dłuższej perspektywie ułatwia szybki rozwój projektów z wieloma współautorami. |
| 147 | + |
| 148 | +### Czy Conventional Commits mogą ograniczać typy commitów, bo programiści będą myśleć tylko o podanych typach? |
| 149 | + |
| 150 | +Conventional Commits zachęca do częstszego używania niektórych typów commitów, np. `fix`. Poza tym konwencja jest elastyczna – zespół może definiować własne typy commitów i zmieniać je w miarę potrzeb. |
| 151 | + |
| 152 | +### Jaki to ma związek z SemVer? |
| 153 | + |
| 154 | +Commity typu `fix` powinny skutkować wydaniem wersji `PATCH`, typu `feat` – wersji `MINOR`, a commity z `BREAKING CHANGE` (niezależnie od typu) – wersji `MAJOR`. |
| 155 | + |
| 156 | +### Jak wersjonować własne rozszerzenia specyfikacji Conventional Commits? |
| 157 | + |
| 158 | +Zalecamy używanie SemVer do wersjonowania własnych rozszerzeń tej specyfikacji (i zachęcamy do ich tworzenia!). |
| 159 | + |
| 160 | +### Co zrobić, jeśli przez pomyłkę użyję złego typu commita? |
| 161 | + |
| 162 | +* Jeśli użyłeś typu zgodnego ze specyfikacją, ale nieodpowiedniego (np. `fix` zamiast `feat`): |
| 163 | + Przed mergem lub wydaniem zalecamy użycie `git rebase -i` do edycji historii commitów. Po wydaniu sposób poprawy zależy od używanych narzędzi i procesów. |
| 164 | + |
| 165 | +* Jeśli użyłeś typu *nie*zgodnego ze specyfikacją (np. `feet` zamiast `feat`): |
| 166 | + W najgorszym przypadku taki commit po prostu nie zostanie uwzględniony przez narzędzia korzystające ze specyfikacji Conventional Commits. |
| 167 | + |
| 168 | +### Czy wszyscy kontrybutorzy muszą stosować Conventional Commits? |
| 169 | + |
| 170 | +Nie! Jeśli korzystasz z workflow opartego na squashowaniu commitów, główni maintainerzy mogą poprawiać wiadomości commitów podczas mergowania – bez dodatkowego obciążenia dla okazjonalnych kontrybutorów. Często system git automatycznie squashuje commity z pull requesta i pozwala maintainerowi wpisać właściwą wiadomość commita podczas scalania. |
| 171 | + |
| 172 | +### Jak Conventional Commits obsługuje commity typu revert? |
| 173 | + |
| 174 | +Revertowanie kodu może być złożone: czy cofamy wiele commitów? Jeśli cofamy funkcję, czy następne wydanie powinno być patch? |
| 175 | + |
| 176 | +Conventional Commits nie określa szczegółowo, jak obsługiwać commity typu revert – pozostawia to narzędziom i autorom logiki. Zalecamy użycie typu `revert` oraz stopki z referencją do SHA commitów, które są cofane: |
| 177 | + |
| 178 | +``` |
| 179 | +revert: let us never again speak of the noodle incident |
| 180 | +
|
| 181 | +Refs: 676104e, a215868 |
| 182 | +``` |
| 183 | + |
| 184 | +## Podsumowanie |
| 185 | + |
| 186 | +Specyfikacja Conventional Commits to lekka konwencja dotycząca wiadomości commitów, która zapewnia prosty zestaw reguł do tworzenia przejrzystej historii commitów i ułatwia budowanie narzędzi automatyzujących. Jest zgodna z SemVer, opisując funkcje, poprawki i breaking changes w commitach. |
0 commit comments