mirror of
https://github.com/conventional-commits/conventionalcommits.org.git
synced 2024-11-15 02:45:15 +01:00
278 lines
19 KiB
Markdown
278 lines
19 KiB
Markdown
---
|
||
draft: false
|
||
aliases: ["/hy/"]
|
||
---
|
||
|
||
|
||
# Համաձայնեցված «Commit»֊ներ 1.0.0-beta.3
|
||
|
||
## Համառոտագիր
|
||
|
||
Համաձայնեցված «commit»֊ների սպեցիֆիկացիան կանոնների խումբ է «commit»
|
||
մեսիջների վերաբերյալ։ Այն առաջարկում է պարզ կանոններ և պահանջներ, որոնց միջոոցով
|
||
հնարավոր է ստանալ հասկանալի և ընթեռնելի «commit»֊ների պատմություն, և հեշտացնել
|
||
ավտոմատացված ծրագրային ապահովման ստեղծումը, որոնք աշխատում են «commit» մեսիջների
|
||
հիման վրա։ Այս կանոնները ուղիղ կապ ունեն
|
||
[SemVer](http://semver.org/#summary)֊ի սպեցիֆիկացիայի հետ, և օգատգործվում են նոր
|
||
ֆունցիոնալի ինտեգրման (features), սխալների ուղղումների (fixes) և հետ
|
||
համատեղելիությունը խախտող փոփոխությունների (bracking changes) մասին «commit»
|
||
մեսիջներում տեղելացնելու համար։
|
||
|
||
«commit» մեսիջները պետք է ունենան հետևյալ կառուցվածքը՝
|
||
|
||
---
|
||
|
||
```
|
||
<տեսակ (type)>[ոչ պարտադիր կոնտեքստ (optional scope)]: <բացատրություն (description)>
|
||
|
||
[ոչ պարտադիր մարմին (optional body)]
|
||
|
||
[ոչ պարտադիր ներքևի հատված (optional footer)]
|
||
```
|
||
---
|
||
|
||
«commit»֊ները պարունակում են հետևյալ ստրուկտուրալ էլեմենտները, որոնց միջոցով ձեր
|
||
ծրագրային ապահովման օգտագործողները կարող են հասկանալ ինչ է տեղի ունեցել
|
||
«commit»֊ների արդյունքում՝
|
||
|
||
1. **fix։**․ `fix` _ՏԵՍԱԿԻ_ «commit»֊ները նախատեված են սխալների ուղղումների (bug
|
||
fix) մասին տեղեկացնելու համար (այն փոխկապակցված է սեմանտիկ տարբերակման մեջ
|
||
ներկայացված [`«ՓԱԹՉ»`](http://semver.org/#summary)֊ի հետ)։
|
||
|
||
2. **feat։**․ `feat` _ՏԵՍԱԿԻ_ «commit»֊ները նախատեված են նոր
|
||
ֆունկցիոնալի ինտեգրման մասին տեղեկացնելու համար (այն փոխկապակցված է սեմանտիկ
|
||
տարբերակման մեջ ներկայացված [`«ՄԻՆՈՐ»`](http://semver.org/#summary)֊ի հետ)։
|
||
|
||
3. **BREAKING CHANGE։**․ `BREAKING CHANGE։` պարունակող «commit»֊ները
|
||
(_ՄԱՐՄՆՈՒՄ_ կամ _ՆԵՐՔԵՎԻ ՀԱՏՎԱԾՈՒՄ_ ) տեղեկացնում են API֊ում արված փոփոխության
|
||
մասին, որը խախտում է հետ համատեղելիությունը (breaking changes) (այն փոխկապակցված
|
||
է սեմանտիկ տարբերակման մեջ ներկայացված [`ՄԱԺՈՐ`](http://semver.org/#summary)֊ի
|
||
հետ), `BREAKING CHANGE:`֊ը կարող է հանդիպել կամայական _ՏԵՍԱԿԻ_ «commit»֊ների հետ:
|
||
|
||
4. Ուրիշ տեսակներ. կարելի է օգտագործել նաև վերը նշվածներից տարբերվող
|
||
_ՏԵՍԱԿ_ ունեցող (`fix:` և `feat:`) «commit»֊ներ, օրինակ՝
|
||
[@commitlint-config-conventional](https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional)֊ը
|
||
(հիմնված է [Angular convention](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines)֊ի վրա)
|
||
առաջարկում է օգագործել են նաև՝ `chore:`, `docs:`, `style:`, `refactor:`,
|
||
`perf:`, `test:` և այլ _ՏԵՍԱԿԻ_ «commit»֊ներ։
|
||
|
||
Մենք նաև առաջարկում ենք օգագործել `improvement`, այն _ՏԵՍԱԿԻ_ «commit»֊ների
|
||
համար, որոնք բարելավում են գործող իմպլեմենտացիան առանց նոր ֆունկցիոնալի
|
||
ինտեգրման և սխալների ուղղման։ Ուշադրություն դարձրեք, որ «commit»֊ների այս
|
||
_ՏԵՍԱԿՆԵՐԸ_ չեն հանդիսանում համաձայնեցված «commit»֊ների սպեցիֆիկացիայի մաս և ոչ
|
||
մի ձևով փոխկապակցված չեն սեմանտիկ տարբերակման սպեցիֆիկացիայի հետ (բացառություն
|
||
են հանդիսանում `BREAKING CHANGE:` պարունակող «commit»֊ները)։
|
||
|
||
_ԿՈՆՏԵՔՍՏ_ կարող է ավելացվել «commit»֊ի _ՏԵՍԱԿԻՆ_ ՝ «commit»-ի կոնտեքստ
|
||
սահմանելու նպատակով։ _ԿՈՆՏԵՔՍՏԸ_ պետք է լինի փակագծերի մեջ օրինակ՝
|
||
`feat(parser): add ability to parse arrays`։
|
||
|
||
## Օրինակներ
|
||
|
||
### «commit», որը ունի _ԲԱՑԱՏՐՈՒԹՅՈՒՆ_ և _BREAKING CHANGE_ իր մարմնում
|
||
|
||
```
|
||
feat: allow provided config object to extend other configs
|
||
|
||
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
|
||
```
|
||
|
||
### «commit», որը չունի _ՄԱՐՄԻՆ_
|
||
|
||
```
|
||
docs: correct spelling of CHANGELOG
|
||
```
|
||
|
||
### «commit», որը ունի _ԿՈՆՏԵՔՍՏ_
|
||
|
||
```
|
||
feat(lang): add polish language
|
||
```
|
||
|
||
### «commit», սխալի ուղղման համար, որը պարունակում է առաջադրանքի (issue) համարը
|
||
|
||
```
|
||
fix: correct minor typos in code
|
||
|
||
see the issue for details on the typos fixed
|
||
|
||
closes issue #12
|
||
```
|
||
|
||
## Սպեցիֆիկացիա
|
||
|
||
Նշված բառերը՝ «ՊԵՏՔ Է» (MUST, SHALL), «ՉՊԵՏՔ Է» (MUST NOT, SHALL NOT),
|
||
«ՊԱՐՏԱԴԻՐ» (REQUIRED), «ԱՆՀՐԱԺԵՇՏ Է» (SHOULD), «ԱՆՀՐԱԺԵՇՏ ՉԷ» (SHOULD NOT),
|
||
«ԽՈՐՀՈՒՐԴ Է ՏՐՎՈՒՄ» (RECOMMENDED), «ԿԱՐՈՂ Է» (MAY) և «ՈՉ ՊԱՐՏԱԴԻՐ» (OPTIONAL)
|
||
պետք է ինտերպրիտացվեն [RFC 2119](http://tools.ietf.org/html/rfc2119) ստանդարտին
|
||
համապատասխան։
|
||
|
||
1. «commit» մեսիջները ՊԵՏՔ Է (MUST) սկսվեն _ՏԵՍԱԿԻ_ (type) մասին նշումով, որը
|
||
գոյական է (noun) և բաղկացած է լինում մեկ բառից՝ օրինակ՝ `feat`, `fix`, և այլն։
|
||
Դրան հետևում է վերջակետի նշանը և բացատը։
|
||
|
||
2. `feat` _ՏԵՍԱԿԸ_ ՊԵՏՔ Է (MUST) օգտագործվի, երբ «commit»֊ի արդյունքում տեղի է
|
||
ունենում նոր ֆունցիոնալի իմպլեմենտացիա ձեր ծրագրում կամ գրադարանում։
|
||
|
||
3. `fix` _ՏԵՍԱԿԸ_ ՊԵՏՔ Է (MUST) օգտագործվի, երբ «commit»֊ի արդյունքում տեղի է
|
||
ունենում սխալի ուղղում ձեր ծրագրում։
|
||
|
||
4. _ԿՈՆՏԵՔՍՏԸ_ ԿԱՐՈՂ Է (MAY) ավելացվել _ՏԵՍԱԿԻՑ_ անմիջապես հետո։ _ԿՈՆՏԵՔՍՏԸ_
|
||
ՊԵՏՔ Է (MUST) գոյական լինի պարփակված փակագծերի մեջ, և նկարագրի կոդի այն հատվածը,
|
||
որի վրա անդրադարձել է «commit»֊ը։ Օրինակ՝ `fix(parser): `։
|
||
|
||
5. _ԲԱՑԱՏՐՈՒԹՅՈՒՆԸ_ (description) ՊԵՏՔ Է (MUST) լինի անմիջապես
|
||
_ՏԵՍԱԿ/ԿՈՆՏԵՔՍՏ_-ին հետևող բացատից հետո։ _ԲԱՑԱՏՐՈՒԹՅՈՒՆԸ_ համառոտ ներկայանում է
|
||
կոդում եղած փոփոխությունները։ Օրինակ՝
|
||
`fix: array parsing issue when multiple spaces were contained in string`։
|
||
|
||
6. _ՄԱՐՄԻՆԸ_ (body) ԿԱՐՈՂ Է (MAY) հետևել կարճ _ԲԱՑԱՏՐՈՒԹՅԱՆԸ_ և ավելի մեծ
|
||
ինֆորմացիա տրամադրել կոդում եղած փոփոխությունների մասին։ _ՄԱՐՄԻՆԸ_ ՊԵՏՔ Է (MUST)
|
||
առանձնացվի _ԲԱՑԱՏՐՈՒԹՅՈՒՆԻՑ_ մեկ դատարկ տողով։
|
||
|
||
7. _ՆԵՐՔԵՎԻ ՀԱՏՎԱԾԸ_ (footer) ԿԱՐՈՂ Է (MAY) լինել մեկ կամ մի քանի տողի տեսքով
|
||
_ՄԱՐՄՆԻՑ_ անմիջապես հետո և պետք է անջատված լինի _ՄԱՐՄՆԻՑ_ մեկ դատարկ տողով։
|
||
_ՆԵՐՔԵՎԻ ՀԱՏՎԱԾԸ_ ՊԵՏՔ Է (MUST) պարունակի մետա֊ինֆորմացիա «commit»֊ի մասին,
|
||
(օրինակ `Fixes #13`):
|
||
|
||
8. Հետ համատեղելիությունը խախտող փոփոխությունները ՊԵՏՔ Է (MUST) պիտակավորվեն
|
||
_ՄԱՐՄԻՆԻ_ կամ _ՆԵՐՔԵՎԻ ՀԱՏՎԱԾԻ_ սկզբում։ Հետ համատեղելիությունը խախտող
|
||
փոփոխությունները ՊԵՏՔ Է (MUST) պիտակավորվեն այս արտահայտությամբ՝ BREAKING CHANGE
|
||
(պարտադիր մեծատառերով), որին հետևում է վերջակետ և բացատ։
|
||
|
||
9. Հետ համատեղելիությունը խախտող փոփոխությունների նկարագիրը (ինչ է փոխվել
|
||
API-ում) ՊԵՏՔ Է (MUST) հետևեն `BREAKING CHANGE: ` պիտակին։ Օրինակ՝
|
||
`BREAKING CHANGE: environment variables now take precedence over config files.`։
|
||
|
||
10. _ՆԵՐՔԵՎԻ ՀԱՏՎԱԾԻ_ ՊԵՏՔ Է (MUST) միայն պարունակի `BREAKING CHANGE`, արտաքին
|
||
հղումներ, խնդրի մասին նշումներ և այլ մետատվյալներ։
|
||
|
||
11. «commit»-ների _ՏԵՍԱԿՆԵՐԸ_ ԿԱՐՈՂ ԵՆ (MAY) լինել `feat`֊ից և `fix`֊ից տարբեր։
|
||
|
||
## Ի՞նչու օգտագործել Համաձայնեցված «Commit»֊ներ
|
||
|
||
* Փոփոխությունների լոգերի (CHANGELOG) ավտոմատ գեներացում։
|
||
* Սեմանտիկ տարբերակի ավտոմատ որոշում «commit»֊ի հիման վրա։
|
||
* Տեղեկացնել փոփոխությունների բնույթի մասին թիմի անդամներին, հասարակությանը և
|
||
հետաքրքրված անձանց։
|
||
* Ավտոմատացնել կառուցման (build) և հրապարակման (publish) պրոցեսները։
|
||
* Հեշտացնում է նոր մասնակիցների ինտեգրումը ձեր նախագծին, հասանելի և
|
||
ստրուկտուրիզացված «commit»֊ների պատմության շնորհիվ։
|
||
|
||
## ՀՏՀ
|
||
|
||
### Ի՞նչպես գրել «commit» մեսիջները աշխատանքի նախնական փուլերում (initial development phase):
|
||
|
||
Խորհուրդ է տրվում գրել մեսիջներն այնպես, կարծես դուք արդեն հրապարակել եք
|
||
պրոդուկտը։ _Որևէ մեկին_ ՝ օրինակ ձեր գործընկերներին կարող է հետաքրքիր լինել, թե
|
||
ինչն է փոխվել, և ինչ նոր հետ համատեղելիությունը խախտող փոփոխություններ են եղել։
|
||
|
||
### Ի՞նչ անել, եթե «commit»֊ը ունի ավելի քան մեկ _ՏԵՍԱԿ_։
|
||
|
||
Եթե հնարավոր է արեք իմ քանի «commit»։ Համաձայնեցված «commit»֊ների հիմնական
|
||
առավելություններից մեկը՝ ավելի կազմակերպված «commit»֊ների և «PR»֊ների թողարկումն է։
|
||
|
||
### Արդյո՞ք աշխատելու այս ձևը չի խանգարում արագ ծրագրավորմանը (rapid development) և արագ իտերացիաներին (fast iteration)։
|
||
|
||
Այս եղանակը խանգարում է ոչ կազմակերպված արագ աշխատանքին։ Դրա փոխարեն դուք արագ
|
||
եք շարժվում երկարաժամկետ տեսլականով, մի քանի պրոյեկտի մասշտաբով և մի քանի
|
||
մասնակիցներ առկայությամբ։
|
||
|
||
### Արդյո՞ք համաձայնեցված «commit»֊ների _ՏԵՍԱԿՆԵՐԸ_ չեն սահմանափակի ծրագրավորողներին, քանի որ նրանք պետք է մտածեն տրամադրված _ՏԵՍԱԿՆԵՐԻ_ սահմաններում։
|
||
|
||
Համաձայնեցված «Commit»֊ների սպեցիֆիկացիան խրախուսում է այլ _ՏԵՍԱԿԻ_ «commit»֊ների
|
||
օգտագործումը։ Ձեր թիմը կարող է ազատ լինել իր սեփական _ՏԵՍԱԿՆԵՐԻ_ ստեղծման մեջ և
|
||
փոփոխել դրանք ժամանակի ընթացքում։
|
||
|
||
### Ի՞նչ կապ ունի այս ամենը տարբերակման սեմանտիկ կանոնների՝ SemVer֊ի հետ։
|
||
|
||
`fix` _ՏԵՍԱԿԻ_ «commit»֊ները թողարկվում են, որպես ՓԱԹՉ. `feat` _ՏԵՍԱԿԻ_
|
||
«commit»֊ները թողարկվում են, որպես ՄԻՆՈՐ. `BREAKING CHANGE` պարունակող կամայական
|
||
«commit», _ՏԵՍԱԿԻՑ_ անկախ, թողարկվում է, որպես ՄԱԺՈՐ։
|
||
|
||
### Ինչպե՞ս է պետք տարբերակել համաձայնեցված «commit»֊ների սպեցիֆիկացիայի հիման վրա ստեղծված իմ սեփական հավելվածերը, օրինակ՝ `@jameswomack/conventional-commit-spec`
|
||
|
||
Համաձայնեցված «commit»֊ների սպեցիֆիկացիայի հիման վրա ձեր հավելվածները ստեղծելիս
|
||
և թողարկելիս, խորհուրդ է տրվում օգտվել՝ [`SemVer`](http://semver.org/#summary)֊ից։
|
||
(Մենք խրախուսում ենք հավելվածների ստեղծումը)։
|
||
|
||
### Ինչ ես պետք է անեմ, երբ սխալմամբ «commit»֊ի սխալ _ՏԵՍԱԿ_ եմ օգտագործել։
|
||
|
||
#### Եթե ծեր օգտագործած _ՏԵՍԱԿԸ_ առկա է սպեցիֆիկացիայում, բայց այն սխալ է, օրինակ `fix`՝ `feat`֊ի փոխարեն։
|
||
|
||
Մինչ ձեր սխալը «mergе» անելը, կամ թողարկելը, խորհուրդ է տրվում օգտագործել
|
||
`git rebase -i` և փոփոխել commit»֊ների պատմությունը։ Թողարկելուց հետո, ուղղելու
|
||
եղանակները տարբեր են՝ կախված նրանից թե ինչ գործիքներից եք դուք օգտվում։
|
||
|
||
#### Եթե ձեր օգտագործած _ՏԵՍԱԿԸ_ առկա չէ սպեցիֆիկացիայում, օրինակ `feet`՝ `feat`֊ի փոխարեն։
|
||
|
||
Դա ամենևին էլ աշխարհի վերջը չէ։ Դա ուղղակի կնշանակի, որ ձեր սպեցիֆիկացիայի հիման վրա աշխատող գործիքներրը կանտեսեն այդ «commit»֊ը։
|
||
|
||
### Իմ բոլոր գործընկերները նույնպե՞ս պետք է հետևեն համաձայնեցված «commit»֊ների սպեցիֆիկացիային։
|
||
|
||
Ոչ․ եթե ձեր աշխատանքային պրոցեսը հիմնված է «squash»֊երի վրա՝ նախագծի ղեկավարը
|
||
կարող է մաքրել պատմությունը մինչև «mergе» անելը և ուշադրություն չդարձնել այդ ամենին։
|
||
Սովորաբար git֊ը ավտոմատ «squash» է անում «commit»֊ները PR֊ի ժամանակ և վերջին
|
||
«commit»֊ը անում է նախագծի ղեկավարը։
|
||
|
||
## Սպեցիֆիկացիայի Մասին
|
||
|
||
Համաձայնեցված «commit»֊ների սպեցիֆիկացիան ոգեշնչված է և ստեղծված
|
||
[Angular Commit Guidelines](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit)֊ի
|
||
հիման վրա։
|
||
|
||
Առաջին սևագիրը ստեղծվել է մի քանի մասնակիցների օգնությամբ։
|
||
|
||
* [conventional-changelog](https://github.com/conventional-changelog/conventional-changelog)․
|
||
գործիքների խումբ է, git֊ի պատմությունից hամաձայնեցված «commit»֊ները
|
||
առանձնացնելու համար։
|
||
* [parse-commit-message](https://github.com/olstenlarck/parse-commit-message)․
|
||
ծրագիր է, որը «commit»֊ից առանձնացնում է
|
||
`{ header: { type, scope, subject }, body, footer }` օբյեկտ:
|
||
* [bumped](https://bumped.github.io/)․ գործիք է, որի միջոցով կարելի է, որոշակի
|
||
գործողություններ կատարել ծրագրային ապահովումը հրապարակելուց առաջ կամ հետո։
|
||
* [unleash](https://github.com/netflix/unleash)․ գործիք, որը ավտոմատացնում է
|
||
ծրագրերի թողարկումը և հրապարակումը։
|
||
* [lerna](https://github.com/lerna/lerna)․ մոնո֊ռեպոզիտորիաների կառավարման
|
||
գործիք է, որը ստեղծվել է Babel֊ի հիման վրա։
|
||
|
||
## Գործիքներ՝ համածայնեցված «commit»֊ների համար
|
||
|
||
* [php-commitizen](https://github.com/damianopetrungaro/php-commitizen)․ գործիք,
|
||
որի միջոցով կարելի է ստեղծել «commit»֊ներ՝ համաձայնեցված «commit»֊ների
|
||
սպեցիֆիկացիային համաձայն։ Կարելի է օգտագործել PHP֊ով իրականացվող նախագծերում,
|
||
կամ առանձին։
|
||
* [conform](https://github.com/autonomy/conform)․ այս գործիքի միջոցով կարելի է
|
||
կազմակերպել կանոններ git ռեպոզիտորիաների համար, օրինակ համաձայնեցված
|
||
«commit»֊ների հիման վրա։
|
||
|
||
## Նախագծեր, որոնք օգտագործում են Համաձայնեցված «Commit»֊ներ
|
||
|
||
* [yargs](https://github.com/yargs/yargs)․ Բոլոր կողմից սիրված «command line»
|
||
արգումենտներ առանձնացնելու գործիք (parser)։
|
||
* [istanbuljs](https://github.com/istanbuljs/istanbuljs)․ Բաց կոդով գրադարանների
|
||
և գործիքների խումբ է, ձեր «JavaScript»֊ով ստեղծված ծրագրային ապահովման տեստերի
|
||
ընդգրկելիությունը որոշելու համար։
|
||
* [standard-version](https://github.com/conventional-changelog/standard-version):
|
||
Ավտոմատ տարբերակման և փոփոխությունների լոգի ստեղծում համաձայնեցված «commit»֊ների
|
||
հիման վրա։
|
||
* [uPortal-home](https://github.com/UW-Madison-DoIT/angularjs-portal) և
|
||
[uPortal-application-framework](https://github.com/UW-Madison-DoIT/uw-frame)․
|
||
[Apereo uPortal](https://www.apereo.org/projects/uportal)֊ի համար նախատեսված
|
||
UI֊ը բարելավելու գործիքներ։
|
||
* [massive.js](https://github.com/dmfay/massive-js)․ Տվյալների հետ աշխատելու
|
||
համար նախատեսված գրադարան Node֊ի և PostgreSQL֊ի համար։
|
||
* [electron](https://github.com/electron/electron)․ Քրոս֊պլատֆորմ, համակարգչային
|
||
ծրագրերի ստեղծման համար JavaScript, HTML, և CSS֊ով։
|
||
* [scroll-utility](https://github.com/LeDDGroup/scroll-utility)․ Անիմացիաների և
|
||
էլեմենտները տեղակայելու համար նախատեսված գործիք։
|
||
* [Blaze UI](https://github.com/BlazeUI/blaze)․ UI հավաքելու գործիք։
|
||
* [Monica](https://github.com/monicahq/monica): An open source personal
|
||
relationship management system.
|
||
* [mhy](https://mhy.js.org): A zero-config, out-of-the-box, multi-purpose
|
||
toolbox and development environment.
|
||
|
||
[![Համաձայնեցված «commit»֊ներ](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)
|
||
|
||
_Ցանկանու՞մ եք տեսնել ձեր նախագիծը այս ցուցակում_ [ուղղարկեք «pull» հարցում](https://github.com/conventional-changelog/conventionalcommits.org/pulls)։
|