Git
У 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 можуть позначати:
- Створюється задача в 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 ==
Практичне сфера застосування: 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 ===
# 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
== 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 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 у віддалений репозиторій.;
Під час роботи з 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
<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.;У командній роботі можна додавати ID задачі:
bug
# Розробник робить commit.; # Створюється pull request або merge request.; '''Remote''' — це віддалений репозиторій, з яким синхронізується локальна копія.;<syntaxhighlight lang="bash">
- переглянути код;
- залишити коментарі;
- запустити CI/CD;
- перевірити тести;
- перевірити зміни в документації;
- погодити або відхилити зміни;
- об’єднати гілку після перевірки.; git add .; # Розробник відправляє зміни в remote.; це розподілена платформа контролю версій.; Git — це платформа контролю версій.; hotfix/prro-shift-close-error
fix Fix duplicate Shopify order import
- права доступу до репозиторію;
- 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
У .gitignore зазвичай додають:
У репозиторії можна зберігати лише шаблони:Update Shopify inventory synchronization
Git flow
інформаційні дані, які не можна зберігати в Git
</div>
На відміну від централізованих систем контролю версій, Git є собою розподіленою системою.;
Remote
Tag — це позначка конкретного commit.; Гілки дозволяють працювати над новими функціями, виправленнями або експериментами без зміни основної стабільної версії.; git add file.txt
git log
.gradle/