Перейти до вмісту

Git

Матеріал з K2 ERP Wiki

DevOps

У K2 ERP це має змогу бути пов’язано з TeamCity, Gradle, Docker і DevOps-процесом.;

K2-1542 Fix LiqPay callback signature validation
<div style="background:#ffebee; border-left:5px solid #e53935; padding:12px; margin:12px 0;">
Типові сценарії:

Rebase має змогу зробити історію чистішою, але його потрібно використовувати обережно.; git switch -c feature/liqpay-callback Найчастіше ключовий remote називається:

feature/k2-shopify-order-import
'''Рекомендація:''' перед commit завжди варто перевіряти git status і git diff.; Для main або production-гілки бажано налаштувати:
Команда об’єднує зміни з іншої гілки.; як ілюстрація, після завершення роботи над feature-гілкою її можна об’єднати з develop або main.; '''Branch''' або '''гілка'''  це окрема лінія розробки.;[[YouTrack]]

Pull request або merge request — це запит на об’єднання змін з однієї гілки в іншу.; Під час використання Git потрібно враховувати:

git revert

Не плутати: git revert безпечніше для спільної історії, бо створює новий commit.; * паролі;

  • токени API;
  • private keys;
  • ключі електронного підпису;
  • production connection strings;
  • сертифікати;
  • повні дампи production-бази;
  • повні інформаційні дані платіжних карток;
  • приватні ключі SSH;
  • secrets CI/CD;
  • доступи до LiqPay;
  • access tokens Shopify, Magento або Wix;
  • ключі ПРРО;
  • зайві персональні інформаційні дані клієнтів.;Gradle

refactor: simplify Magento product mapper

</syntaxhighlight>Створити і одразу перейти на гілку:

Tags можуть позначати:

  1. Створюється задача в YouTrack.; bugfix/K2-1608-prro-duplicate-check

Основні поняття Git

Правила commit messages

Типовий бізнес-процес роботи має змогу виглядати так:

application.example.yml Java

Для звичайного коду Git LFS не потрібен.; Repository або репозиторій — це сховище проєкту, яке містить файли та історію змін.;

  • два розробники змінили один файл;
  • змінена одна й та сама функція;
  • файл був перейменований в одній гілці й змінений в іншій;
  • застаріла feature-гілка;
  • великі рідкісні merge замість частого актуалізація гілки.; Такі сервіси додають:

</syntaxhighlight> Під час code review перевіряють: Типова структура: git reset --soft HEAD~1 Для безпечної роботи з Git потрібно контролювати:

git init

</syntaxhighlight> git revert створює новий commit, який скасовує зміни попереднього commit.;== Типовий Git-процес для K2 ERP ==

K2 Модуль Magento

Практичне сфера застосування: Git надає можливість кожному розробнику працювати у власній гілці, не заважаючи іншим, а потім безпечно об’єднувати зміни після перевірки.;</syntaxhighlight>Краще:

У Git можна зберігати:
'''Git flow''' — це підхід до організації гілок, у якому використовуються main, develop, feature, release і hotfix-гілки.; # Розробник запускає локальні тести.; Він користувачі можуть координувати зміни, уникати втрати коду, контролювати релізи, вести історію рішень і оперативно знаходити, коли та чому була внесена певна зміна.;== Git і TeamCity ==
Основні задачі Git:

Приклад:<syntaxhighlight lang="bash">

* тимчасові файли;
* кеш;
* build-артефакти;
* локальні конфігурація IDE;
* файли логів;
* секрети;
* .env;
* node_modules;
* target;
* build;
* dist;
* файли операційної системи.; task/update-saf-t-export

== .gitignore ==
Приклад:<syntaxhighlight lang="bash">
{| class="wikitable"
Команда відправляє локальні commits у віддалений репозиторій.; * main — стабільна production-версія;
* develop — основна гілка розробки;
* feature/* — нові функції;
* release/* — підготовка релізу;
* hotfix/* — термінові виправлення production.; * автоматичні тести;
* feature flags;
* code review;
* швидкий CI;
* дисципліна маленьких змін.; # Команда git add додає зміну в staging area.;== Загальний характеристика ==
=== Rebase ===

== GitHub, GitLab, Bitbucket ==
завдяки наявності Git особливо важливий для командної розробки, де над одним продуктом функціонує багато людей.; Commit містить інформацію про те, які файли були змінені, хто зробив зміну, коли вона була зроблена і з яким повідомленням.; node_modules/

* pull request або merge request;
* code review;
* issue tracking;
* wiki;
* CI/CD;
* protected branches;
* access control;
* webhooks;
* releases;
* package registry.;== Безпека Git ==

=== git pull ===
Команда показує різницю між файлами або версіями.;

Локальний репозиторій знаходиться на комп’ютері розробника.; * потребу в навчанні команди;

  • ризик неправильного merge;
  • ризик force push;
  • ризик потрапляння секретів у історію;
  • складність rebase для новачків;
  • складність великих monorepo;
  • проблеми з великими binary-файлами;
  • потребу в правилах branch strategy;
  • потребу в code review;
  • потребу в CI/CD-перевірках.;</syntaxhighlight>Повернути зміни:
    == Git і YouTrack ==
    == Git у K2 ERP ==
    Загальне правило:
    

істотно: Git — це не хмарний сервіс і не сайт.;

  • розподілену модель;
  • швидку локальну роботу;
  • потужну роботу з гілками;
  • зручне об’єднання змін;
  • повну історію змін;
  • підтримку командної розробки;
  • інтеграцію з CI/CD;
  • підтримку code review;
  • можливість rollback;
  • зв’язок із задачами;
  • підтримку open source і enterprise-проєктів;
  • широку підтримку IDE та сервісів.;</syntaxhighlight>Створити нову гілку:
    [[Модуль Prom]]
    update
    

Гілки в Git

Branch

feat: add Shopify order import .env

Git hooks

Приклад створення гілки для задачі:
Репозиторій має змогу бути:
== Можливі помилки під час роботи з Git ==
Add PRRO shift close validation
У pull request команда має змогу:

Популярні сервіси:
'''Commit'''  це зафіксований набір змін.; feature/K2-1542-liqpay-callback

Типовий шлях зміни:
build/
Приклади повідомлень commit:<syntaxhighlight lang="text">
Сучасніша команда для перемикання гілок.;== Обмеження та ризики ==

'''Зверніть увагу:''' Git зберігає історію змін, але сам по собі не гарантує якість коду.;[[LiqPay]]
'''Merge'''  це об’єднання змін з однієї гілки в іншу.; У контексті '''K2 ERP''' Git має змогу використовуватися для контролю версій усіх технічних компонентів системи.; '''Інтеграційний акцент:''' pull request бажано пов’язувати із задачею в YouTrack, а CI/CD у TeamCity має автономно перевіряти збірку і тести перед merge.; # Запускаються тести.; # Створюється артефакт.;<syntaxhighlight lang="bash">
dist/

=== Repository ===

Рекомендація: щоб зменшити кількість конфліктів, потрібно частіше синхронізувати гілку з основною, робити невеликі commits і не тримати feature-гілки занадто довго без merge.; git commit -m "Add order import from Shopify" Команда отримує зміни з віддаленого репозиторію і застосовує їх до локальної гілки.; # TeamCity запускає CI.; Розробник має змогу створювати commits, переглядати історію, створювати гілки та працювати локально навіть без постійного підключення до центрального сервера.; * бачити змінені файли;

  • створювати commits;
  • перемикати гілки;
  • робити push і pull;
  • вирішувати конфлікти;
  • переглядати історію файлу;
  • створювати pull request;
  • порівнювати зміни;
  • бачити blame.;=== git commit ===
Команда створює новий Git-репозиторій у поточній директорії.;
# Logs
*.log

# Environment
release/1.8.0

# Java / Gradle
origin
git branch

# Node
git push -u origin feature/liqpay-callback
[[ПРРО]]

# IDE

ДПС </syntaxhighlight>

git rebase main K2 Модуль Wix

Типові сценарії: git branch feature/liqpay-callback Fix duplicate import of Prom orders changes

  • реліз;
  • production-версію;
  • hotfix;
  • важливу контрольну точку;
  • версію бібліотеки;
  • версію Docker image.; Його потрібно використовувати обережно, особливо якщо commits уже були відправлені у віддалений репозиторій.; docs: update LiqPay integration guide
Protected branches — це захищені гілки, у які не можна напряму відправляти зміни без перевірок.;
== Code review ==

Типовий бізнес-процес:
Update PRRO fiscalization error handling

== Див.; додатково ==
Git потрібен для контролю змін у проєкті.; Вони дозволяють вести паралельну розробку.; Потрібно вважати секрет скомпрометованим, відкликати або змінити його і очистити історію за потреби.; config.sample.json
== Git tags ==
git push

'''git stash''' надає можливість тимчасово зберегти незавершені локальні зміни і очистити робочу директорію.; Гілки є собою однією з найважливіших можливостей Git.; Бази даних, файли користувачів і важливі середовища потрібно резервувати окремо.; # Запускається pipeline.;=== git switch ===
[[IDE]]
Для K2 ERP Git доцільно використовувати як центральне джерело коду, конфігурацій, міграцій, тестів, DevOps-скриптів і документації.; Можливі варіанти:
Improve LiqPay callback error handling
== Git revert і git reset ==

== Основні команди Git ==

git merge

</syntaxhighlight>

git push

Commit

Git є собою основою CI/CD.; # Команда git commit створює commit.; * main;

  • master;
  • develop;
  • feature;
  • bugfix;
  • hotfix;
  • release.; # Відправляє гілку в remote.; git init
git rebase переносить commits поточної гілки поверх іншої гілки.; # Розробник вносить зміни в код.; Приклад:
'''Git hooks'''  це скрипти, які виконуються при певних Git-подіях.;[[TeamCity]]
YouTrack має змогу бути пов’язаний із Git-репозиторієм.; # Після успішних перевірок зміни об’єднуються в основну гілку.; git merge feature/liqpay-callback
Git можна використовувати локально, але в командах зазвичай застосовують сервіси для віддалених репозиторіїв.;=== git add ===

Для секретів потрібно використовувати захищені сховища.; Для цього підходу важливі:
== Робоча область Git ==

Git  це основна платформа контролю версій для сучасної розробки програмного забезпечення.; У Git є собою кілька важливих станів файлів.;<syntaxhighlight lang="bash">
[[Spring]]

Приклади:<syntaxhighlight lang="text">
Команда показує список гілок.; * запуску форматування;
* запуску лінтера;
* перевірки commit message;
* запуску тестів;
* перевірки секретів;
* заборони commit у неправильну гілку.; Це зменшує ризик випадкового потрапляння помилкового коду в реліз.; '''Для K2 ERP:''' Git має бути єдиним джерелом історії коду, міграцій, конфігурацій збірки та DevOps-скриптів.; Для цього потрібні code review, тести, CI/CD, правила роботи з гілками та дисципліна команди.; Кожна зміна має змогу бути зафіксована у вигляді commit.; Tags часто використовуються для релізів.; * відстежувати commits;
* запускати build після push;
* запускати build для pull request;
* показувати автора змін;
* зберігати changelog;
* прив’язувати build до commit;
* створювати артефакти;
* запускати deployment після успішної збірки.; # Команда git push відправляє commit у віддалений репозиторій.;
Команда показує поточний стан робочої директорії: які файли змінені, які готові до commit, які не відстежуються.;
Під час роботи з Git можуть виникати такі помилки:

* ID задачі в назві гілки;
* ID задачі в commit message;
* зв’язок commit із задачею;
* автоматичне актуалізація статусу задачі;
* перегляд commits у задачі;
* контроль, які задачі потрапили в реліз.; bugfix/duplicate-prom-orders
Скорочений вигляд:
Команда перемикає гілку або відновлює файл.; # Інший розробник виконує code review.; # Виконується збірка.; # Створює commits із зрозумілими повідомленнями.; Він надає можливість зробити історію більш лінійною, але потребує обережності, особливо в командній роботі.;<syntaxhighlight lang="bash">
До основних переваг Git можна віднести:

git diff
</div>

git clone https://example.com/project.git

* заборону direct push;
* обов’язковий pull request;
* обов’язковий code review;
* обов’язковий успішний CI build;
* обов’язкові тести;
* обмеження на force push;
* обмеження прав merge.; GitHub, GitLab, Bitbucket або Azure DevOps  це сервіси, які можуть зберігати Git-репозиторії та додавати інструменти для командної роботи.;

TeamCity має змогу підключатися до Git-репозиторію через VCS Root.;== Git і IDE ==

git checkout

git tag v1.8.0 SaaS

git clone

git status

Назви гілок бажано стандартизувати.;
[[ЕДО]]
'''Git LFS''' або '''Large File Storage''' застосовують, коли потрібно для роботи з великими файлами, які небажано зберігати напряму в Git-історії.; .idea/
Hooks можуть використовуватися для:

'''Merge conflict''' виникає, коли Git не має змогу автономно об’єднати зміни, бо різні гілки змінили одну й ту саму частину файлу.; '''Trunk-based development'''  це підхід, у якому команда часто інтегрує невеликі зміни в основну гілку.;</div>
'''Рекомендація:''' production-гілки не повинні оновлюватися напряму без review і CI/CD.;

Branch naming

Git stash

  • commit зроблено не в тій гілці;
  • забули git pull перед роботою;
  • конфлікт під час merge;
  • випадково закомічено секрет;
  • випадково закомічено build-артефакти;
  • занадто великий commit;
  • незрозуміле повідомлення commit;
  • force push у спільну гілку;
  • довга feature-гілка без оновлень;
  • видалено важливу гілку;
  • зміни не потрапили в staging area;
  • неправильно вирішений conflict;
  • переплутано reset і revert.;

Secrets management

Code review — це перевірка коду іншими учасниками команди перед об’єднанням у основну гілку.; .env.example

git reset

git diff

Добрий commit має бути логічно завершеним і зрозумілим.; IDE сприяє працювати з Git візуально, але базові команди Git все одно істотно розуміти.; Git надає можливість розробникам працювати з гілками, створювати commits, об’єднувати зміни, переглядати історію, повертатися до попередніх версій, виконувати code review і спільно працювати над програмним забезпеченням.;== Конфлікти Git == Приклади hooks:

Безпека: якщо секрет випадково потрапив у Git, недостатньо без ускладнень видалити його новим commit.; Він надає можливість зберігати історію змін, працювати з гілками, об’єднувати код, виконувати code review, пов’язувати зміни із задачами та запускати CI/CD-процеси.;

Добрі commit messages мають бути короткими, зрозумілими і конкретними.; !Що означає </syntaxhighlight>

Protected branches

</syntaxhighlight>Для нової гілки:
<div style="background:#ede7f6; border-left:5px solid #5e35b1; padding:12px; margin:12px 0;">
Приклад:<syntaxhighlight lang="gitignore">

!Область

Висновок

  • зберігання історії змін;
  • робота з гілками;
  • спільна розробка програмного забезпечення;
  • об’єднання змін різних розробників;
  • перегляд різниці між версіями;
  • повернення до попереднього стану;
  • пошук автора зміни;
  • підготовка релізів;
  • робота з pull request або merge request;
  • супровід code review;
  • зв’язок задач із commit;
  • автоматизація процесів CI/CD;
  • контроль версій конфігурацій та інфраструктури.; Погано:
    Для командної роботи можна використовувати Conventional Commits:
    Через IDE можна:
    переважні аспекти:
    
    </div>
    
    TeamCity має змогу:
    
    * [https://git-scm.com/ Git]
    * [https://git-scm.com/doc Git Documentation]
    * [https://git-scm.com/book/en/v2 Pro Git Book]
    * [https://docs.github.com/en/get-started/using-git/about-git About Git — GitHub Docs]
    * [https://docs.gitlab.com/topics/git/ Git — GitLab Docs]
    * [https://www.atlassian.com/git Git tutorials — Atlassian]
    
    Сучасні IDE мають вбудовану підтримку Git.; Commit має унікальний ідентифікатор, автора, дату, повідомлення та список змінених файлів.; # Розробник створює гілку з ID задачі.;[[Rider]]
    git revert <commit_hash>
    Приклад:<syntaxhighlight lang="bash">
    git checkout feature/liqpay-callback
    git push origin v1.8.0
    
    .vscode/
    Команда копіює віддалений репозиторій на локальний комп’ютер.; Git flow має змогу бути корисним для продуктів із плановими релізами, але для деяких команд він має змогу бути занадто складним.; # CI/CD-сервер отримує подію.; * можна rebase власну локальну гілку;
    * не варто rebase спільну гілку, яку вже використовують інші розробники.;</div>
    
    git switch feature/liqpay-callback
    test: add unit tests for payment callback
    
    git log
    
    * розробка програмного забезпечення нової функції;
    * виправлення помилки;
    * підготовка релізу;
    * терміновий hotfix;
    * експеримент;
    * актуалізація залежностей;
    * розробка програмного забезпечення інтеграції;
    * рефакторинг.; Команда показує історію commits.;<syntaxhighlight lang="bash">
    
    * GitHub;
    * GitLab;
    * Bitbucket;
    * Azure DevOps Repos;
    * Gitea;
    * Forgejo.; fix: prevent duplicate PRRO receipt
    
    Add LiqPay payment callback validation
    Приклад commit message:<syntaxhighlight lang="text">
    
    git log --oneline
    
    * локальним;
    * віддаленим;
    * приватним;
    * публічним;
    * основним;
    * форком;
    * дзеркалом.; Git застосовується для керування змінами у файлах проєкту.;=== git status ===
    
    '''Rebase''' — це перенесення commits однієї гілки поверх іншої.;== Pull request і merge request ==
    == Для чого потрібен Git ==
    |-
    |Working directory
    |Поточні файли на комп’ютері розробника
    |-
    |Staging area
    |Підготовлені зміни, які увійдуть у наступний commit
    |-
    |Local repository
    |Локальна історичний розвиток commits
    |-
    |Remote repository
    |Віддалений репозиторій на сервері
    |}
    == Trunk-based development ==
    
    # Розробник змінює файл.;== Git LFS ==
    
    * pre-commit;
    * commit-msg;
    * pre-push;
    * post-merge;
    * pre-receive;
    * update.;== Git і CI/CD ==
    == Git rebase ==
    Типові причини конфліктів:
    git stash
    == Джерела ==
    
    Типові гілки:
    '''.gitignore''' — це файл, у якому вказується, які файли Git не повинен відстежувати.; * backend-код;
    * frontend-код;
    * інтеграційні модулі;
    * API;
    * тести;
    * SQL-міграції;
    * Dockerfile;
    * docker-compose.yml;
    * Helm charts;
    * Terraform-код;
    * CI/CD-конфігурації;
    * документацію;
    * скрипти;
    * шаблони налаштувань;
    * модулі Shopify, Magento, Wix, Prom;
    * модулі LiqPay;
    * модулі ПРРО;
    * модулі ДПС і ЕДО;
    * SAF-T UA;
    * е-ТТН.; git reset має змогу переписати локальну історію і створити проблеми, якщо зміни вже були відправлені іншим розробникам.; Це означає, що кожен розробник має локальну копію репозиторію з історією змін.;== переважні аспекти Git ==
    При конфлікті потрібно вручну вибрати правильний варіант, перевірити код і створити commit з вирішенням конфлікту.; git pull
    git switch -c feature/k2-shopify-order-import
    
    У Git не можна зберігати:
    </div>
    
    [[K2 Модуль Shopify]]
    
    * коректність логіки;
    * читабельність коду;
    * відповідність архітектурі;
    * безпеку;
    * тести;
    * обробку помилок;
    * роботу з даними;
    * продуктивність;
    * сумісність із наявним кодом;
    * документацію.;<div style="background:#e8f4ff; border-left:5px solid #1e88e5; padding:12px; margin:12px 0;">
    
  • CI/CD secrets;
  • HashiCorp Vault;
  • AWS Secrets Manager;
  • Azure Key Vault;
  • Google Secret Manager;
  • Kubernetes Secrets;
  • змінні середовища;
  • захищені конфігурації deployment.; Це сприяє робити commits чистішими і логічнішими.; Віддалений репозиторій зазвичай знаходиться на сервері або сервісі, як ілюстрація GitHub, GitLab, Bitbucket або Azure DevOps.; git reset змінює стан гілки або staging area.;
    bug
    
    У командній роботі можна додавати ID задачі:
    # Розробник робить commit.; # Створюється pull request або merge request.; '''Remote''' — це віддалений репозиторій, з яким синхронізується локальна копія.;<syntaxhighlight lang="bash">
    
  • переглянути код;
  • залишити коментарі;
  • запустити CI/CD;
  • перевірити тести;
  • перевірити зміни в документації;
  • погодити або відхилити зміни;
  • об’єднати гілку після перевірки.; git add .; # Розробник відправляє зміни в remote.; це розподілена платформа контролю версій.; Git — це платформа контролю версій.; hotfix/prro-shift-close-error
</syntaxhighlight>Це корисно, коли потрібно оперативно переключитися на іншу гілку, але поточна робота ще не готова до commit.; Найкращий результат Git дає разом із YouTrack, TeamCity, IDE, Gradle, Docker, тестами, protected branches, code review і правилами безпечної роботи з секретами.;

fix Fix duplicate Shopify order import

SAF-T UA Е-ТТН

  • права доступу до репозиторію;
  • MFA для акаунтів;
  • SSH-ключі;
  • access tokens;
  • protected branches;
  • code review;
  • secret scanning;
  • dependency scanning;
  • audit log;
  • права на merge;
  • права на release;
  • права на CI/CD;
  • підписування commits за потреби.; Команда додає зміни до staging area.; Для розробника: staging area надає можливість вибрати, які саме зміни потраплять у commit.; Це сприяє не закомітити зайві файли, секрети або випадкові зміни.; Команда створює commit із підготовлених змін.; # CI/CD створює артефакт або виконує deployment у тестове середовище.; Не плутати: Git зберігає історію файлів, але не є собою системою резервного копіювання production-даних.; Усі зміни бажано прив’язувати до задач YouTrack і перевіряти через TeamCity.;

Git LFS має змогу використовуватися для:

  • менше довгих feature-гілок;
  • менше великих конфліктів;
  • швидший feedback;
  • краще підходить для CI/CD;
  • простіша історичний розвиток;
  • частіші релізи.; # За потреби виконується deployment.; * великих зображень;
  • відео;
  • архівів;
  • моделей;
  • великих тестових файлів;
  • binary assets.;
    git stash pop
    

Merge

git branch

</syntaxhighlight>

У .gitignore зазвичай додають:

У репозиторії можна зберігати лише шаблони:
Update Shopify inventory synchronization

Git flow

інформаційні дані, які не можна зберігати в Git

</syntaxhighlight>Додати всі зміни:
</div>
На відміну від централізованих систем контролю версій, Git є собою розподіленою системою.;
Окремо варто відзначити яка застосовується; додатково реалізовано документації, конфігураціях, скриптах, інфраструктурі і інших файлах проєкту виступає ключовою рисою зберігання історії змін у коді забезпечується через Git.; # Команда git status показує зміну.;
Це безпечний спосіб скасувати зміни в спільній історії.;<syntaxhighlight lang="bash">

Remote

Tag — це позначка конкретного commit.; Гілки дозволяють працювати над новими функціями, виправленнями або експериментами без зміни основної стабільної версії.; git add file.txt

git log

.gradle/