# Git-ის სემანტიკური კომიტები

Git სასშუალებას გვაძლევს გვქონდეს დეველოპმენტის ისტორია. ეს ისტორია კი გამოისახება კომიტების საშუალებით.

იმისათვის, რომ ჩვენი პროგრამული უზრუნველყოფის ისტორია კითხვადი იყოს, რამეთუ ძნელბედობის ჟამს მოგვიწიოს მათ შორის ხარვეზის ძიება, საჭიროა გვქონდეს კომიტის წერის ერთი სტანდარტი და ერთი დისცპლინა.

თუ გვექნება დანერგილი პროექტის, პროდუქტისა თუ ორგანიზაციის გარშემო კომიტის წერის ერთი სტანდარტი მაშასადამე ჩვენ და ჩვენი კოლეგები გაცილებით მარტივად შევძლებთ კომიტთა ისტორიის სასურველი ეტაპის გამოკვლევასა და გამორკვევას.

**სემანტიკური კომიტის** ცნება უფრო ფილოსოფიაა ვიდრე კონკრეტული მკაცრი წესების კრებული. თითოეულ თემს(ორგანიზაციას, დეველოპერთა გუნდს და ა.შ.) შეიძლება თავის თავზე მორგებული სემანტიკური კომიტები ჰქონდეთ შემუშავებული. ჩვენც ჩვენი შევიმუშაოთ.

### კომიტის სტრუქტურა <a href="#id-0250" id="id-0250"></a>

ჯერ გავერკვიოთ კომიტის ნაწილებში.



```
type(scope)!: commit short description

commit long description
```

პირველი ხაზი არის კომიტის თავი, რომელშიც შეგვიძლია გავაკეთოთ კომიტის მოკლე აღწერა არაუმეტეს 50 სიმბოლოსი, მაგ:

```
feat: create payment system with TBC gateway
```

კომიტს ასევე შესაძლოა ჰქონდეს ტანი, რომელშიც უფრო დაწვრილებითი აღწერა კეთდება. კომიტის თავისგან ერთი ხაზის გამოტოვებით იწერება კომიტის ტანი. მაგ:

```
example: this is commit head exampleI am the body of this commit, treat me well please...
```

ყველა კომიტს აქვს ტიპი: _feat_, _fix_, _refactor_ და ა.შ.

ასევე ყველა კომიტს აქვს მოკლე აღწერა, რომელიც მოკლედ და ლაკონურად მიგვითითებს რა გაკეთდა ამ კონკრეტულ კომიტში.

აბსოლუტურად ყველა კომიტი უნდა შეიცავდეს ტიპს და მოკლე აღწერას, მაგ:

```
type: short description
```

ასევე გვაქვს დამხმარე საშუალებები, რომლითაც უფრო მეტად კითხვადს და ზუსტს ვხდით კომიტს.

ერთ-ერთი ასეთი საშუალებაა სქოუფი. სქოუფი იწერება ტიპის შემდგომ ფრჩხილებში სანამ ორწერტილს და კომიტის მოკლე აღწერას დავწერთ. სტრუქტურულად ასე გამოიყურება.

```
type(scope): short description
```

სკოუფში ვწერთ “_სათაურს_” რაც აზუსტებს რაზეა საუბარი, მაგ:

```
fix(payments): remove type in trx_id
```

ამ შემთხვევაში სქოუფი **payments** აზუსტებს, რომ ეს კონკრეტული კომიტი გადახდების სისტემას ეხება.

ასევე გვაქვს შესაძლებლობა, რომ კომიტზე გამოვხატოთ ემფაზა(ხაზგასმა). ამას ვაკეთებთ ტიპის შემდგომ, ორწერტილამდე ძახილისნიშნის დასმით. ამით მივუთითებთ, რომ კომიტი არის საყურადღებო(breaking change). როდესაც ემფაზირებულ კომიტს ვაკეთებთ, კომიტის ტანში უნდა მივუთითოთ ძირეული ცვლილების აღწერა რომელსაც BREAKING\_CHANGE ფრაზით და ორწერთილით აღვნიშნავთ, მაგ:

```
refactor!: upgrade laravel version

BREAKING_CHANGE: we were using laravel version 5.7 and now it is upgraded to 8.0
```



### კომიტის წერის 5 მცნება <a href="#id-5d90" id="id-5d90"></a>

1. კომიტის ტიპი, სქოუფი, მოკლე აღწერა და კომიტის ტანი აუცილებელია დაბალ რეგისტრში დავწეროთ(lowercase)
2. არის გამონაკლისები, როდესაც შესაძლოა მაღალი რეგისტრის სიტყვები გამოვიყენოთ. უმეტეს შემთხვევაში ის სიტყვები, რომლებიც ინგლისურ ენაში აუცილებლად მაღალ რეგისტრში დაიწერებოდა, მაგ: Redberry, Tusday, GET, POST და ა.შ.
3. ემფაზირებულ(breaking change) კომიტის ტანში აუცილებელია BREAKING\_CHANGE იყოს მაღალ რეგისტრში და დაბალი ტირით გამოყოფილი.
4. კომიტის მოკლე აღწერა აუცილებელია იყოს აწმყო დროში(ანუ წარსულში არა)
5. კომიტის მოკლე აღწერა არ უნდა შეიცავდეს სასვენ ნიშნებს

### კომიტის ტიპები <a href="#id-8d7e" id="id-8d7e"></a>

fix — გამოსწორებული რაიმე ხარვეზი

feat — დამატებულია ახალი ფუნქციონალი

style — მარქაფის ცვლილებები

refactor — კოდი გაუმჯობესდა ფუნქციონალის შეცვლის გარეშე

chore — რუტინული, ნაკლებსაყურადღებო ცვლილებები

docs — დოუმენტაციის გაუმჯობესება/დამატება

test — Unit/Feature/E2E ტესტებთან დაკავშირებული კომიტები

ci — Continuos Integration-თან დაკავშირებული კომიტები

wip — (work in progress) კონრეტული ფუნქციონალი ბოლომდე არ გვაქვს მიყვანილი და ამჟამად ჯერ დასრულებული არაა
