CommerCentr
UA
Увійти

Форк магазину для розробника: доступ, зони, push

Ви взяли замовлення на доробку. Замовник прийняв пропозицію, гроші зайшли в escrow — і в кабінеті зʼявився форк. Що це насправді, куди можна писати код і як зміни доїдуть до реального магазину.

Одразу знімемо питання, яке виникає в кожного, хто робить це вперше: доступу до сайту клієнта ви не отримуєте. Ні до адмінки, ні до бази, ні до файлів на його хостингу. Ви отримуєте окремий git-репозиторій — копію його CMS. Усе, що туди запушите, платформа перетворить на оновлення й доставить клієнту тим самим каналом, яким приходять звичайні апдейти.

Що таке форк і чого він не дає

Форк — персональна гілкаclient/{uuid}у репозиторії замовника — тобто магазину, який замовник уже підключив до свого акаунта. Uuid непрозорий: ні домену, ні бази, ні чужих форків через нього не видно.

Три речі варто зрозуміти до першого коміту.

Форк створюється не за брифом, а за прийнятою пропозицією. Доки замовлення не в роботі, робочої копії не існує. Це і є авторизація: замовник не «дає доступ» окремою кнопкою — доступ виникає в момент, коли він приймає вашу ціну й резервує кошти. Наосліп доступ не видається нікому.

Форк живий, доки живе замовлення. Закрили замовлення — форк закривається автоматично. Заморожене чи закрите замовлення push не приймає.

Ваш кастом і оновлення платформи — різні файли. Це не обіцянка, а технічне обмеження: зони, у яких вам дозволено писати, не перетинаються з тими, які замінює апдейт.

Тепер чесно про межі, щоб не витрачати час на очікування, яке не справдиться. Це не доступ до бази — дані магазину лишаються поза досяжністю. Це не доступ до адмінки — ви змінюєте її код, але не заходите в неї. Це не спільна робота в реальному часі: ви пушите, платформа збирає, замовник ставить оновлення, і момент застосування вирішує він. І це не канал для секретів — ключі й токени клієнта у форк не потрапляють.

Кабінет розробника CommerCentr: картка CMS-форку з гілкою client, доменом магазину та станом апдейтів

Крок 1. Отримати git-доступ

Кабінет розробника → CMS-форки. У картці форку — блок «Git-доступ (push кастому)» і кнопка «Згенерувати токен».

Блок git-доступу до форку: URL репозиторію та готовий сценарій clone, commit і push

Токен варто розуміти правильно, бо тут легко помилитись:

ВластивістьЩо це означає на практиці
Один токен — один магазинТокен форку А не відкриє форк Б. Витік одного не відкриває решту ваших проєктів
Обмежений строк життяТокен не вічний. Протермінований git відкине, і ви побачите запит креденшелів — це сигнал перевидати, а не «щось зламалось»
Показується один разЗберігайте одразу: платформа тримає лише хеш і показати повторно не може
Перевидача відкликає попереднійНатиснули «Згенерувати» вдруге — старий токен цієї ж пари мертвий. Навмисно: «один токен — один форк» має бути буквальним

Email для git-логіну не потрібен: токен самоідентифікуючий. Якщо натрапите на старі інструкції зemail:токен@…— вони застаріли, і символ@у логіні лише ламав URL.

Крок 2. Клон, гілка й локальна копія

У картці є готовий сценарій — копіюйте його, а не збирайте команду руками:

# <PAT> = ваш токен. Клон у ПОТОЧНУ теку (крапка!) — тека має бути порожня.
git clone https://oauth2:<PAT>@forge.commercentr.com/git/<uuid> .

Дві деталі, на яких спотикаються.

oauth2:перед токеном обовʼязковий. Токен має бути в полі пароля. Форма<PAT>@hostлишає пароль порожнім, і git зупиняється з проханням його ввести — у скрипті це просто фатал.

Гілку перемикати не треба.client/{uuid}виписується одразу при клоні (що таке гілка в Git). Якщо за звичкою створите свою — push у неї не пройде: приймається лише гілка вашого форку.

Локальна копія: архів і домен розробки

Клон дає код, але не робочий магазин: бази й налаштувань у ньому немає. Щоб підняти сайт локально, у картці форку є «Завантажити архів» — і поле домену розробки поруч.

Домен вкажіть до завантаження, наприкладlab.example.comабоlab.loc:8080. Він вшивається вAPP_URLархіву, і це не формальність: із порожнім значенням магазин після інсталяції згенерує всі абсолютні адреси — ассети, редіректи, OAuth-callback, листи — на неіснуючий хост, і ви витратите вечір на діагностику там, де проблема в одному полі.

Архів збирається тим самим пакувальником, що й покупецький: чужі секрети й рантайм вирізані,.envсвіжий. Одна відмінність — усередині лежитьFORK.mdіз готовими git-командами.

Живого.gitв архіві навмисно немає. Причина технічна: тягнути в zip багатомегабайтне bare-репо гірше, ніж три команди в інструкції. Тому послідовність така: архів для запуску локально, клон — для роботи з кодом.

Крок 3. Де можна писати код

Головне обмеження, і воно не декларативне: збірка перевіряє кожен шлях у вашому коміті.

Таблиця дозволених і заборонених зон кастому у форку магазину: config, www, Templates, Custom, Languages

Дозволено:

ЗонаЩо сюди кладемоПриклад
config/нові файли налаштуваньconfig/custom_shop.php
www/фронтенд, статика, ассетиwww/assets/custom.css
/Templates/шаблони-вʼюхи, override виглядуadmin/Templates/desktop/pages/dashboard.tpl
/Custom/ваш PHP-код і класи (теку створюєте самі)client/Custom/PriceHook.php
/Languages/переклади, override текстівadmin/Languages/uk/Shop.php

Заборонено:core/,bin/,data/,install/,modules/,vendor/,tools/,.git/, а такожwww/index.php,config/routing.phpіconfig/events/.

Логіка проста: усе, що замінює оновлення CMS, вам не належить. Якби форк писав у ядро, апдейт затер би ваш кастом — або конфліктував із ним на кожному релізі.

Зверніть увагу на зірочку в/Templates/,/Custom/і/Languages/: вона означає будь-який модуль, включно зadmin/. Перекрити вигляд адмінки чи її переклади можна без окремого дозволу. Окремий дозвіл потрібен лише для логіки — контролерів, моделей, сервісів.

Крок 4. Push, доставка і відмови

git commit -am "опис змін"
git push origin client/<uuid>

Далі автоматично: платформа перевіряє токен і те, що замовлення активне; перевіряє кожен змінений шлях проти зон; збирає з різниці патч і публікує його для магазину. Замовник бачить оновлення у своїй адмінці — так само, як звичайний апдейт CMS.

У картці форку є лічильник «Стан апдейтів» — скільки патчів у ланцюзі. Це індикатор, що push доїхав і став доставним оновленням, а не просто ліг у гілку.

Найчастіша відмова — файл поза зоною. Ви отримаєте сповіщення з конкретним переліком шляхів. Збірка не «підчищає зайве», вона відхиляє коміт цілком: часткове застосування дало б магазину напівстан, у якому незрозуміло, що саме поїхало.

Що робити: перенесіть зміну в дозволену зону. Майже завжди це можливо — правку ядра замінює шаблон-override, власний клас уCustom/або перевизначений переклад. Якщо задача справді вимагає логіки вadmin/, просіть розширений доступ, а не обхідний шлях.

Розширений доступ, етапи та re-baseline

Розширений доступ. Замовник може дозволити ширшу зону — наприкладadmin/цілком, разом із контролерами й сервісами. Це його рішення, і ризики оновлень він бере на себе: логіка вadmin/може конфліктувати з майбутніми релізами. Просіть її тоді, коли шаблонів і хуків справді не вистачає, — не «про всяк випадок».

Етапи. Роботу можна розбити на частини, і кожну замовник приймає окремо: етап проходить стани «очікує → подано → зараховано». Для вас це означає, що гроші розблоковуються поетапно, а не все наприкінці. Для великої задачі це помітно знижує ризик обом сторонам.

Re-baseline. Якщо форк відстав від community-бази й кастом почав конфліктувати з оновленнями, у картці два виходи. «Перенести на свіжу базу» — форк переїжджає на актуальний знімок CMS, кастом лишається. «Відчепити від community» — форк переходить на власну базу: кастом лишається весь, але community-оновлення більше не надходять. Крок незворотний, і саме тому він окремою кнопкою. Друге має сенс, коли магазин так далеко пішов від стандартної CMS, що оновлення дають більше конфліктів, ніж користі. Це усвідомлений компроміс, а не аварійна кнопка.

Якщо замовник відкрив спір

Спір — не аварія й не звинувачення особисто вам. Це стан замовлення, у якому escrow лишається замороженим до розбору: гроші не йдуть ні вам, ні назад замовнику, доки платформа не вирішить.

Ви побачите це двома шляхами: системним записом у листуванні замовлення й дзвіночком у кабінеті. Окремої «дії у спорі» у вас немає — і це навмисно: вирішує арбітр платформи, а ви сторона, яка пояснює. Ваш інструмент тут один, і він потужніший, ніж здається — те саме листування.

Що варто зробити одразу:

  • Відповісти по суті претензії, а не загалом. Арбітр бачить усю нитку: бриф, вашу пропозицію, кожне повідомлення обох сторін і системні події — коли етап подано, коли зараховано.
  • Показати, що вже прийнято. Якщо етапи здавались частинами й замовник їх зараховував, це видно в історії з датами. Зарахований етап — сильний аргумент, і його не треба доводити словами.
  • Прикріпити артефакти. Листування приймає вкладення; скріншот, лог або посилання на коміт переконують краще за опис.

Звідси й практична порада на майбутнє: тримайте комунікацію в замовленні, а не в месенджерах. Домовленість, якої немає в нитці, для арбітра не існує. Розбивати роботу на етапи варто з тієї ж причини — кожен зарахований етап це зафіксоване приймання, а не памʼять обох сторін.

Що це дає вам як виконавцю

Три речі, яких зазвичай немає у фрилансі «дайте FTP».

Ви не можете зламати клієнту сайт правкою ядра — зони цього не дозволять. Це знімає найбільший страх замовника, а разом із ним половину переговорів про доступи.

Ваш кастом переживає оновленняcommunity-CMS. Не тому, що ви акуратні, а тому, що він фізично в інших файлах.

І гроші вже зарезервовані в escrow до того, як ви взялися за роботу. Ви бачите резерв на сторінці замовлення й не залежите від того, чи згадає замовник про оплату.

Якщо ви ще не брали замовлень на платформі, подивіться, як замовник складає бриф і приймає роботу: у нього свій набір кроків і своя відповідальність.

CTA: відкрийте кабінет розробника → CMS-форки й перегляньте картку наявного замовлення, перш ніж генерувати токен. Половина питань знімається самим інтерфейсом.

Якщо домовитись у листуванні не вдалось — механіка розгляду окремо: суперечка за замовленням.