Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Best practice

  • записи
    2
  • коментарів
    76
  • перегляду
    3 934

Git и Opencart, для самых маленьких


stickpro

10 026 переглядів

Я получил некий фидбэк от прошлой статьи, и меня просили сделать более подробный гайд по инициализации и установки git.
Итак дано чистый сервер с установленным opencart.

image.png.dc1c98fa88f156daca06e60063f7f3eb.png

Для начала нам нужно установить git, так как я на сервере использую ubuntu я воспользуюсь командой, внимание git должен быть установле везде где вы работает с кодом, будь то это продакшен(боевой) сервер тестовый или локальный пк

apt install git

на вашем же сервере используется другой пакетный менеджер, вам нужно установить с помощью него в centos например это

yum install git

На локальном пк можно под windows можно установить данных софт gitforwindows
Далее нам по хорошему зарегестрировать на одном из сервисов это может быть github или gitlab я использую в большей степени последний. С регистрацией там все просто.
Далее нам нужно создать новый репозиторий
image.png.249adadf7a904e7f873d7ffba417f52a.png

кликаем по New project
image.png.f0ee2673400c0903af1494abc8fcafce.png

пишем название репозитория, обычно это название сайта, по желанию пишем описание проекта, и выбраем каким будет репозиторий приватным или публичным.

Далее gitlab нам сам предлагает, что нужно сделать для инициализации git для начала устанавливаем глобальные конфиги, чтобы видеть кто и его контакт для связи,
обычно это операция делается один раз после установки git
image.thumb.png.eeb41b5b45d7d5d54d2845677b4b0634.png
 

Переходим в консоль, в моем случае это наш тестовый сервер и пишем последовательно 2 команды
image.png.26423aa5ef80c358a5a7e2e92a43dfc6.png
далее, так как у нас уже развернут opencart первый вариант который предлагает нам gitlab не подходит, нам больше подходит второй варинат. Но все по порядку для начала перйдем в папку с нашим проектом

cd /path/to/you/site

итак мы в корневой дирректории нашего сайта теперь мы проинициализируем git командой
 

git init

gttиimage.png.b1a422064d6a007594fa3ad364781b27.png
Далее можем сразу указать удаленный репозиторий как нам и предалагает gitlab
image.png.929d99ac80ee036b69e9ab369beddda1.png

Далее мы создаим файл .gitignore в него нужно прописать файлы и папки которые мы не хотим загружать в репозиторий который гит будет игнорировать и не будет трогать не при каких обстоятельствах, например config. не нужно чтобы кто-то знал пути и достпы к бд сайта или любых других подключений
создаем файл любым удобным для вас образом  я воспользуюсь консолю берем за основу gitignore из официального git репозитория opencart но с некоторой модификацией ссылку на файл осталю конце статьи
image.thumb.png.6479f43f1dfdcebf00fcb35ac15ac7fe.png

Далее нам нужно добавть содержимое рабочей директории в индекс (staging area) для последующего коммита.

git add .

пишем команду  чтобы все файлы добавить в индекс
ну и сделаем наш первый комит


git commit -m "Initial commit"

Готово теперь у нас есть комит можем его залить на удаленный репозиторий

git push -u origin master

image.png.cc85db85bf5384a7c9cbdb7d41596e44.png

но при попытке запушить, возникает ошибка,  а все потому что мы не настроили общение gitlab и нашего сервера по ssh ключам, сейчас мы это исправим
Для начала нам нужно сгененрировать ssh ключ на сервере командой предварительно заменив email на свой

ssh-keygen -t rsa -b 4096 -C "[email protected]"

утилита предложит нам путь до файла оставляем по умолчанию, и ввести пароль для passphrase но он может быть пустым, его не обязательно заполнять.
далее нам нужен публичный ключ его можно получить командой

cat ~/.ssh/id_rsa.pub 

ну собственно куда ssh-keygen его и сгенерировал.


Копируем наш ключ и идем в gitlab setting > ssh
image.png.e2b2ed31d758550c07007b11eec18d9a.pngimage.thumb.png.e75f1941bf3660f055c2ced38a106b91.png

Добавляем наш ключик и делаем заново команду
 

git push -u origin master   


image.png.0bc0140f8a034c89554fe42fc09b9db8.png

и вуаля мы залили наш проект на сайт
image.thumb.png.bfc9b86f38ff31823280943a55200d3a.png
 

заметим что конфиги не попали в  наш репозиторий.

теперь мы имеем ветку master это ветку нажна только для продакшена в нее что либо комитить считается мовитоном, елси не идет стихийная разработка сайта.
Давайте создадим dev ветку сайта в которой будут попадать все наши изменения для dev сервера.
image.png.e88b8fbe7728d363ba140b8683607a7f.png


image.png.81e3164196de8e9cf69f4f175468dfd7.png

все ветка для разработки создана, теперь например у меня встала задача на сайте поманять фон на всем сайте и сменить подпись в футере сайта

Для начала опишем эту задачу, идум в issue и создаем новое issue
image.thumb.png.e0b92092f71819363d26038cf4d3ed90.png

image.thumb.png.f94b49e756fedb2c116dcb3038efb745.png
 

Назвать ишью лучше по порядку начиная с #1 #2 .... #90000 это удобно для самого gitlab чтобы закрыть ишью будет достаточно последний комит назвать "Close #issue" c числами же это проще всего.
Итак ишью создано теперь я как разработчик клонирую репозиторий к себе не локальный пк командой

git clone [email protected]:stick.qwe/opencart.git

где ссылка на наш репозиторий
image.png.3b9e68bb86461f349ce6857034d50423.png


произвожу  настройку своей локальной среды разработки будь то openserver docker lamp xamp что угодно, для того чтобы развернуть сайт.
Я буду использовать ide phpstorm вы же можете использовать любой редактор кода который вам нравится

Для начала нам нужно переключиться на ветку dev

1811765334_imgur-2020_05_11-171355.png.2718033cf684a7733616f0abb4a73692.png
далее нам нужно создать новую ветку с названием нашего issue

810434286_imgur-2020_05_11-171458.png.787addd16165b39c0c179d364cb19bdc.png


image.png.2a98557b0a0fa1be7efbc2a59ccf7fe0.png
отсавляем галочку на checkout branch
в правом нижнем углу у нас нужная нам ветка сделанная из dev ветки
image.png.62c510d88f3b5c18996156aea6952b5b.png
начинаем выполнять нашу работу
итак мы выполнили один пункт нашей задачи
image.png.4dc15e34658494b83350fee45f569c07.png

давайте закомитим его средствами phpStorm идем VCS -> git -> commit file
image.thumb.png.d148caa0114b80952a00512376ba0877.png

Открывается окно в котором мы пишем название нашего коммита что мы сделали в этом изменении обычно я в начало добавляю так же название нашего ишью для систематизации
image.thumb.png.4f58338dbf53fb15fb37a0716d0525e4.png

мы видим в каких файлах были произведены изменения и что они верны жмем commit
phpStorm говорит нам о warning  в файле стилей не обращаем внимание, на это и жмем commit
и продолжаем выполнять нашу следающую задачу
image.png.ab5beb50ba6545dc8d62f7b8d4695243.png


задача выполнена, осталось только сделать последний commit  идем туда же vsc->git->commit file

image.thumb.png.540dd49acfaf82cd7f65d92dabd0124a.png

называем его именно так тем самым помогаю gitlab самому за нас закрыть issue и нажимаем
commit and Push
image.png.13c17a995d22ee6c75310e281b8fb035.png

image.png.fec7920f6d26626474f70ab69822c568.png

мы видим наши коммиты и отправляем их на сервер и идем  в gitlab
и проставим галочки над выполненными задачами
image.thumb.png.e67153a2c29e819898f8ef349ec29444.png

 

мы видим что содалась новая ветка нашего разработчика image.thumb.png.9b52e9128aa697a8329dc33f79c91895.png

 

теперь нам нужно объеденить ветку #1 > dev а потом dev > master

для этого нам нужно создать merge request
image.thumb.png.b5ae1aff093ad0e7b08610b865d904d6.png

Gitlab нам предлагает нашу ветку смержить из #1 в мастер но это не правильно, нам нужно смержить в dev нажимает в Change branches

 

image.png.b4da13d76f3bd4715a404859eab7d022.png

и меняем target branch на dev
image.thumb.png.0c66334c36b064ea9fc58b0e348da2bc.png

 

здесь в принципе ничего не меняем, ставим галочку на удаление исходной ветки и нажимаем sudmit merge request
image.thumb.png.a305360b69fb3c3d273445ce1bfb005a.png

далее нажимаем merge
image.thumb.png.ab704b0a12fdf8b07bbd0fd3162be422.png


так же не забываем закрывать наше issue кнопкой close issue
image.png.105e2d085757686b23a6c6e8461ff2e4.png

теперь мы можем залить нашу dev ветку на дев сервер и оттестировать полностью, но так как сейчас у нас как бы ее нет, мы зальем наши правки сразу на продакшен сервер, но для начала создадим новый merge request теперь уже из dev >  master

image.png.e97c2701896d53207305fef9e1ff62d0.png

делаем тоже самое с одним исключением это убираем галочку с удаления ветки
image.thumb.png.ceda2e7dcf94ee47a85b7c0032e69d67.png


merge request прошел успешно теперь у нас осталались 2 ветки с измененым кодом и нашими новыми коммитами image.thumb.png.514fdc1d2ef7dfca561116432299c2dc.png


далее мы идем на наш продакшен сервер переходим в папку с проектом и выполняем одну команду.
 

git pull

image.png.32a200eb46ee008052378ddfb405f8bc.png
 

видим что  наши файлы обновились проверяем в браузере
image.thumb.png.c418cde38df1e8c632bc28496313f84d.png

 

вот видим наши изменения. Тоже самое и с дев сервером единственное перед pull необходимо сменить ветку на дев севрере
 

git checkout dev

 

и так же сделать git pull.

Подытожим.
Сегодня мы научились базовой работе с git и ведения проекта, это только базовые принципы работы с гит, его возможности куда больше, чем описно в статье, но не все сразу. как говорится
ссылка gitlab репозиторий с .gitgnore https://gitlab.com/stick.qwe/opencart 

 

  • +1 20

49 коментарів


Recommended Comments



@pimur все просто, у меня клиенты вот такого рода "Когда надо прям щас. И не надо мне расказывать как лучше" вероятно идут ******" к вам с пашей

Выдано предупреждение:
- нецензурные выражения
Наказание:

- ограничение публикаций

Надіслати
1 час назад, Pascha сказал:

когда оппонент лишается аргументов и начинает откровенно хамить, то это говорит о беспомощности под гнетом реальных фактов. Какие же вы все же слабые и не уверенные в своих взглядах... жаль.

Если говорить о хамстве, иными словами не неуважении к другому, то в отношении @Pascha  что бы начинать хамить, надо сначала уважать человека, а я не уважал его изначально. Поэтому мое поведение и отношение не менялось. Так что я ничего не начинал, а всего лишь продолжил.

Паша я уже много раз выше писал свое мнение. Если уровень Вашего интеллекта не позволяет интерпретировать текст, то нечего здесь писать о фактах и раздавать ярлыки, в своем блоге пишите мнения. Вот @pimur ответил конструктивно и к нему нет претензий, а Вы не уважаемый пустомолот, "собака лает - караван идет"

Надіслати
17 часов назад, pimur сказал:

я не против. говорите это чаще =)!

Ну если они будут довольны результатом после Вашей работы, то почему нет)) Это во благо мне, Вам и клиенту, а значит мир будет чуточку лучше.
А мое ироничное высказывание про ******* это не грубость, а всего лишь четкое лексическое подчеркивание смысла, что бы вся суть была понятна.

Почти всем хорошего настроения) у меня все.

Надіслати
22 минуты назад, Pascha сказал:

... 

Считаю, что написано все очень неплохо, лично мне данная подача понравилась. Как Вы заметили, я не первый год здесь и наблюдал многое, сделал соответствующие выводы для себя. Поэтому могу вести себя так как мне хочется. Нравится это кому-то или нет.

Надіслати

@stickpro красавчик! Давно пора популяризовать адекватное владение сайтом среди их владельцев, а не FTP -> покрасил кнопочку -> забыл. Хотя это собственно и есть разделение между торгашами и предпринимателями.

 

@Pascha мне напоминает бурчащего дедушку - "а вот в наши годы и без гита справлялись и ничего..". Ну и работайте дальше без инструментов, если не надоело еще на цифре 10 (а у Вас это цифра 400) кнопочки красить, то это Ваш выбор. Вы продолжите красить кнопочки за 1$, если Вам это достаточно., а молодые разработчики почитают этот комментарий и пойдут учить новые инструменты, чтобы повысить свой скилл и стоимость времени.

 

@Pascha Если Вы достигли своего потолка в изучении технологий (принципально или по какому-то другому признаку), то это не повод отговаривать других от использования удобных инструментов разработки. А Ваши "неудобные вопросы" и вовсе неудобные.

 

Даже кнопочку покрасить - Issue, если Вы действительно дорожите своим магазином и он приносит Вам деньги.

Надіслати
11 минут назад, Pascha сказал:

А пользователей форума Вы так же воспринимаете? 

Обиженный? Ничем не могу помочь.

 

12 минут назад, Pascha сказал:

(как и 2-комнатные аппарты в Bavaro (Доминикана) сдача в аренду которых принесет мне еще 1-1.5К вечнозеленых в мой и без того нищенский бюджет

Инвестирование в недвижимость - это хорошо.

Надіслати
5 часов назад, matroskin92 сказал:

@stickpro идея для следующей записи - это как поднять свой сервер на локалке, идентичный тому, что у кого-то на хостинге вертится.

+1, в частности на маке.)

Надіслати
1 час назад, toporchillo сказал:

Моя мечта - автодеплой из гита на форум.

И еще давать покупателям доступ к гит-репозиторию модуля, пусть сами обновляются, если захотят. 

 

Вот только не знаю, можно ли сделать, чтобы модуль в составе OpenCart тянулся и обновлялся из git. Файлы ведь размазаны по папкам :-(

над этим стоит подумать, интересны варианты как кто организовал для себя? 

идеального решения не нашел но из того, что 

1) Забирать изменения Chery-pick.

2) немного не по теме - с помощью gulp собирать модуль.

3) написать свой installer.

4) где-то здесь выше автор предлагал вариант.
5) Отдельная ветка (использую для чистого ocmod.zip архива модуля) здесь вся суть, что .gitignore можно "привязать" к ветке

Спойлер



*
/* 

!upload/admin/controller/catalog/mymodule.php 
и так далее


 


но везде свои минусы.

Надіслати
3 часа назад, toporchillo сказал:

Вот только не знаю, можно ли сделать, чтобы модуль в составе OpenCart тянулся и обновлялся из git. Файлы ведь размазаны по папкам :-(

composer

 

3 часа назад, toporchillo сказал:

И если не понравится, то легко откатить без поиска этих вчерашних бэкапов.

некоторые модули еще иногда требуют новых таблиц, столбцов в бд

Надіслати
1 час назад, Sha сказал:

) немного не по теме - с помощью gulp собирать модуль.

Есть варианты? Я через gulp и шаблон и модули собираю

Надіслати
В 19.05.2020 в 15:42, pimur сказал:

А ведь @Pascha прав. Понятно дело гит удобен, он нужен и т.д и т.п Основной посыл был клиентам ну прям начать использовать. Только 90-98% он им не нужен.

 

да, git он нужен тем 2%, что будут лапшу от тех 98% разгребать.

 

В 19.05.2020 в 15:42, pimur сказал:

Проект таков что щас я делаю одно. Прилетает руководитель и говорит. Срочно надо вот там одну фигулину сделать, срочно...

У меня на пк, phpstorm смотрит на сревер, так мне теперь что надо расказываать начальству что так не по феншую?

как раз тут git и показывает, что без него никуда даже одному. в этой ситуации ты можешь сделать git stash или закомитить в свой бранч, переключится на бранч начальника, потом еще куда-то переключится, а потом все что наворотил замерджить в свой бранч и продолжить. и потом тот кто будет разгребать, сможет проследить что из каких веток попало в мастер и как же так вышло.

никакого смысла городить какие-то самопальные костыли с подменами из бэкапов и ручными копированиями нет. костыли просто больше времени отнимут, даже если ты один.

 

p.s. чего-то все картинки в посте пропали

  • +1 2
Надіслати
В 09.06.2020 в 21:23, magecode сказал:

Статья про основы git, и это в 2020. Печально прям :mellow:

Печальнее то, что народ отвергает даже основы git.

  • +1 1
Надіслати

Спасибо за отличную статью, пробую работать по данной методике (в упрощённом виде).

 

Использую одну ветку (сайт на тестовом хостинге и разрабатывается с нуля). Редактирую в VSCODE c GitLens, делаю push в GITLAB, потом через ssh git pull на сервере где ведётся разработка. Трудозатраты выросли, т.к. на каждый чих теперь нужно писать комментарий, потом отправлять в удалённый репозиторий, потом на сервере скачивать изменения, потом смотреть изменения. Наверное, если работать с локально установленным сайтом было бы проще, но так я не привязан к компьютеру и могу работать в любом месте.

 

С каким проблемами столкнулся - при установке новых модулей нужно не забывать делать push c сервера в gitlab и в редакторе соответственно.

 

Хотелось бы в следующих сериях раскрытия хуков для автоматизации заливки с Gitlab на сервак.

Надіслати

 

3 минуты назад, d2boy сказал:

Хотелось бы в следующих сериях раскрытия хуков для автоматизации заливки с Gitlab на сервак.

в репозиотрии есть упрощенный скрипт автодеплоя  https://gitlab.com/stick.qwe/opencart/-/blob/master/.gitlab-ci.yml, я использую https://docs.gitlab.com/runner/, тоесть все что попадает в мастер, уходит на сервер

Надіслати
23 hours ago, stickpro said:

 

в репозиотрии есть упрощенный скрипт автодеплоя  https://gitlab.com/stick.qwe/opencart/-/blob/master/.gitlab-ci.yml, я использую https://docs.gitlab.com/runner/, тоесть все что попадает в мастер, уходит на сервер

 

Этот скрипт нужно разместить на сервере, я правильно понимаю? Или он как-то на gitlab'e запускается? Почитал доки - только больше запутался

Надіслати
23 часа назад, d2boy сказал:

 

Этот скрипт нужно разместить на сервере, я правильно понимаю? Или он как-то на gitlab'e запускается? Почитал доки - только больше запутался

Да этот файл размещается на сервере, в настройках репозитория во вкладке ci/cd настраивается Runners и на сервере настраивается эта утилита

Надіслати

@stickpro , супер статья. Я только присматриваюсь к opencart, как раз мозговал, как его к гиту прикрутить.

 

1. Я правильно понимаю, что вы все изменения в файлах делаете наживую (судя по пути в редакторе для stylesheet.css)? Я прочитал, что вроде как лучше использовать формат ocmod, чтобы потом проще обновляться было. Впрочем, как обновляться, я еще не прочитал :))

 

2. Если нам надо установить какие-то расширения (которые вроде, как минимум, должны "прописаться" в БД + могут дополнительно поправить там таблицы) - надо делать это через админку, так? Следовательно, я вижу такой путь:

- сначала устанавливаем их на дев-сервере (на общем либо на дополнительном локальном), тестируем, затем коммитим файловые изменения в дев-ветку

- мержим дев и прод (мастер)

- вручную снова устанавливаем расширения на прод-сервере (чтобы затронуть БД) и синхронизируемся на нем с продом (мастером)

Так? Или есть способ устанавливать такие расширения не через админку? Например, подсунул xml / архив в нужное место, и ОНО его само прожует?

 

3. Не по теме, но спрошу: а нет ли в opencart функционала / модуля, чтобы хранить статические страницы в виде файлов, в идеале в markdown-разметке? Чтобы положить в каталог новый .md файл, и ОНО его сразу раздает (с роутом по пути и названию файла)? Вот это был бы шик. Спрашиваю, потому что еще не до конца разобрался с механизмом дополнений - гугл дает какие-то 100500 сайтов с дополнениями, кто в лес, кто по дрова... такое ощущение, что в центральном маркетплейсе много чего нет.

 

Спасибо!

Надіслати

Стоит продолжить освоение темы. При работе с Magento 2 я столкнулся с одной компанией, профессионально разрабатывающей модули под эту платформу, так вот они через свой репозитарий организовали автоматическое обновление модулей. В Мадженто 2 есть возможность обновлять движок и сторонние модули через composer, так вот эта команда организовала так, что с их репозитория можно обновлять модуль, но при условии, что вы оплатили поддержку. То есть они организовали репозиторий с билингом. Правда кажется они поднимали свой репозиторий на Satis.

 

Кстати и бесплатные модули из магазина приложений Мадженто тоже композером устанавливаются на автомате. Удобно.

Змінено користувачем EVMedvedev
Надіслати
1 час назад, EVMedvedev сказал:

Стоит продолжить освоение темы. При работе с Magento 2 я столкнулся с одной компанией, профессионально разрабатывающей модули под эту платформу, так вот они через свой репозитарий организовали автоматическое обновление модулей. В Мадженто 2 есть возможность обновлять движок и сторонние модули через composer, так вот эта команда организовала так, что с их репозитория можно обновлять модуль, но при условии, что вы оплатили поддержку. То есть они организовали репозиторий с билингом. Правда кажется они поднимали свой репозиторий на Satis.

 

Кстати и бесплатные модули из магазина приложений Мадженто тоже композером устанавливаются на автомате. Удобно.

Компосер конечно хорошо, но слишком много наслоений получиться.. каждый модуль через компосер это доп.слой.. Не в рамках опенкарт. Через компосер доп.пакеты для модулей можно ставить, но не полноценно модули. Для этого Даниель же делает Установку с маркетплейса, по той же логике можно свой установщик сделать с обращением к своему серверу/репозиторию

  • +1 2
Надіслати
В 29.12.2020 в 00:47, ocdev_pro сказал:

Компосер конечно хорошо, но слишком много наслоений получиться.. каждый модуль через компосер это доп.слой.. Не в рамках опенкарт. Через компосер доп.пакеты для модулей можно ставить, но не полноценно модули. Для этого Даниель же делает Установку с маркетплейса, по той же логике можно свой установщик сделать с обращением к своему серверу/репозиторию

 

Не понял о каких слоях идет речь. В нормальном движке, разработанном в соответствие с общепринятыми стандартами разработки софта, композера вполне достаточно для добавления и обновления пакетов. Все системы, разработанные например на базе Symfony прекрасно так работают. Собственно композер как менеджер пакетов для этого и нужен. Другое дело что пока это ОС не касается в полной мере. 

Надіслати

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.