Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Git, SVN

Opencart CE (Community Edition)

Давно я ожидал появления альтернативной версии репозитория Опенкарт с более адекватным ведением дел. Вообще-то думал, что он чуть раньше появится. Но чтобы его объявили прям в "новостях и анонсах" на форуме -- не ожидал. Смело :) Я думал, будет как-то менее заметно и в одном из репо десятка-другого активных разработчиков и комиттеров, разочаровавшихся в политике DK. Респект rph :)

Вообще-то в какой-то момент, когда Qphoria начал бранчи в гитхабе изучать, я поверил, что не всё потеряно. Но потом опять началось, ДК ничуть не изменился. Workflow в гитхабе также остался прежним.

В общем, на днях (21 июня) пара квалифицированных разработчиков (rph /opencarthelp/ и AddCreative как минимум) объявили о рождении "community edition" форка (ответвления от основного репозитория Opencart). Судя по списку планируемых вопросов -- с этими людьми "кашу сварить" можно. И скорее даже нужно. Очень надеюсь, что там дело пойдёт намного лучше по части совместной разработки.

Основной упор Opencart CE собирается делать на немного измененном цикле жизни версий Опенкарт: поддержке отдельных веток для устаревающих версий и внесению исправлений обнаруженных ошибок не только в главную текущую ветку разработки, но и в ветки более старых версий.

Чтобы было чуть более понятно, надо пояснить, как сейчас ведутся дела.

Далее...

Немцы выложили законы на гитхаб для мержей и пулл-реквестов

@vessi at Juick:

*Германия *вин *git
немцы выложили законы на гитхаб. Можно делать пулл-реквесты, после одобрения бундестагом они будут смержены.

https://github.com/bundestag/gesetze

German Federal Laws and Regulations
This Git repository contains all German federal laws and regulations in Markdown format. The source is the XML version of the laws from www.gesetze-im-internet.de.

Как облегчить процесс публикации изменений на сервер

[Git, FTP] Для FTP и shared hosting (без SSH доступа и полноценной консоли)

Рекомендую готовый скрипт git-extract:

По команде, в которой указывается диапазон коммитов, создаёт папку .deployment с готовым деревом и изменившимися файлами. И список удаленных файлов, которые придётся удалить вручную (если пользуетесь FTP клиентом) или через SSH на сервере (если есть такая возможность).

У скрипта есть маленькая особенность: запускать его надо в корне репозитория (там, где расположена скрытая папка `.git`). Не в подпапках из любого места репо: там он просто отработает вхолостую.

[Git, SSH] При полноценном хостинге (с SSH доступом)

Судя по всему, у меня сделано один в один как в http://habrahabr.ru/blogs/Git/127213/, поэтому не вижу смысла описывать то же самое. У меня немного отличается структура папок проектов, но это несущественно. Суть проста - на сервере лежит как Git-репозиторий, так и обычная рабочая копия (на которую смотрит веб-сервер). Точнее, на одну из папок репозитория - public_html. Потому что в репозитории хранится ещё документация, служебные скрипты, тестовые и чистые SQL дампы.

И при новых коммитах от разработчиков (git push) репозиторий по хуку делает автоматически две операции - обновление локальной серверной копии (git pull origin dev) и копирование набора файлов из config_sets (здесь у меня хранятся файлы, специфические для разных конфигураций: для одного разработчика, для другого, для dev2-windows, dev2-linux, для production1, production-dev и так далее, если надо ещё больше). Понятна идея? Требуемый набор конфигов просто перезаписывается поверх того, что есть в репозитории (а туда могут попасть и локальные конфиги девелоперов, если они не исключены через .gitignore), и получается чистая и настроенная конфигурация. Быстро, без чек-листов, ручных проверок-исправлений и условий-ветвлений с множеством девелоперских конфигов (зачем они на сервере?).

Естественно, на сервере настроено использование SSH-ключей, чтобы избавиться от необходимоси ввода пароля после git pull.

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

См. также

[PHP, FTP] Web based FTP Sync Tool written in PHP. Есть возможность запрещать синхронизацию для отдельных файлов/папок.

[Windows, GUI] Сделать архив, содержащий только измененные файлы (сохранив при этом всю структуру папок) может также WinMerge: http://opencartforum.ru/topic/28606-решено-winmerge-как-сделать-изменения-в-движке-и-сохра/#entry223289

Что такое diff

23 ноября 2011 г. Ruslan Brest Howto » Git, SVN2

При публикации изменений используется формат DIFF. С его помощью можно перенести небольшие изменения к себе вручную (см. ниже). Или автоматически: командами git apply rb-patch.diff или patch -p2 < rb-patch.diff (находясь в корневой папке магазина - там, где расположены каталоги admin и catalog).

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

Перенос изменений вручную

См. http://rb.labtodo.com/page/opencart-admin-attributes-usability-improvement#comment-138

Это список изменений. В начале строк - индикаторы: что убрать (минусы, красный цвет) в старом файле и что добавить (плюсики, зелёный цвет).

В каких именно файлах - указано утроенным значком (---, +++)

@@ -106,10 +106,12 @@ -- строки, т.е. примерно на 106 строке вы должны найти похожий кусок кода, перед и после блока изменений обычно выводится пара строк текста. "Примерно 106" - потому что я множество правок вношу в свой магазин и содержимое файлов может не совпадать с оригинальным OpenCart 1.5.1.1 или с тем правками, которые внесены у вас до меня.

Правки индицируются значками "-" и "+" в самом начале строки: те, что с минусом, были убраны (они должны совпадать с тем, что вы у себя видите перед внесением изменений), а те, что с плюсом -- добавлены в это место. Поэтому можно руками внести и проконтролировать все изменения.

В данном случае надо закомментировать небольшую часть в файле admin/controller/catalog/attribute.php и модифицировать одну строку в admin/model/catalog/attribute.php (заменить её на несколько новых, которые можно скопировать и убрать плюсики в начале строк).

См. также

  • Улучшение сортировки на витрине Опенкарт - ещё одна статья с примером описания "обычным языком" и diff-файлом. До сих пор считаете длинное описание более понятным, чем diff? Не перестаю удивляться таким заявлениям.

Git User's Survey 2011

21 сентября 2011 г. Ruslan Brest Web development » Git, SVNОбсудить

UPD: This survey is currently closed. More information can be found on http://git.wiki.kernel.org/index.php/GitSurvey2011


Все на выборы!

В смысле заполните анкетку: https://www.survs.com/survey/VCAGZA8CT5

Результаты наверное будут многим пользователям Git интересны.

Я по ходу дела узнал много новых букв названий интересного Git-софта.

Вывод Git branch в подсказку командной строки

19 сентября 2011 г. Ruslan Brest Linux » Howto » Web development » Git, SVNОбсудить

При активном использовании Git-а и переключений между разными ветками часто хочется видеть, в какой ветке находишься. Удобно добавить вывод названия branch-а в подсказку командной строки bash:

rb@rb-msi:~/projects/opencart-a4u (master)$ 

Далее...

Первичные настройки Git

12 сентября 2011 г. Ruslan Brest Linux » Howto » Web development » Git, SVNОбсудить

Представляемся надолго, чтобы коммиты не были ничейными:

git config --global user.name "Your Name Comes Here"
git config --global user.email you@yourdomain.example.com

Облегчаем визуальное восприятие изменений:

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global color.ui auto

Не забываем про заплетающиеся пальцы (вы способны быстро набрать "status" без опечаток?! Раз 50 в день?!?! Ого!):

git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.logd 'log --oneline --graph --decorate'
git config --global alias.logdm 'log --oneline --graph --decorate --no-merges'
git config --global alias.logn 'log --pretty=format:"%cd %C(auto)%h (%an) %s%+b%d" --date=short'
git config --global alias.logst 'log --stat=140,100'
git config --global alias.logf 'log --stat=140,100'
git config --global alias.bav 'branch -av'
git config --global alias.rv 'remote -v'
git config --global alias.diffw 'diff --word-diff'

Проделав это один раз, можно добавить в свой бекап файл ~/.gitconfig, в котором настройки и хранятся. Или скопируйте его в Дропбокс, а в домашнем каталоге оставьте симлинк на этот файл.

И не забывайте про существование возможности авторизоваться на гит-сервере с репозиториями с помощью своего публичного SSH ключа: пара генерируется один раз, публичный ключ раздаёте тем, кто должен вас узнавать и пускать без стука, и забываете про ввод паролей.

Если нужен gitk, то перед вторым запуском (первый под Линуксом нужен, чтобы слегка удивиться, проморгаться и взбодриться) исправьте в ~/.gitk интерфейсные шрифты:

set mainfont {{andale mono} 9}
set textfont {{andale mono} 9}
set uifont {clean 10 bold}
set tabstop 4

Хотя это в принципе и через GUI сделать можно.

Бекап, контроль изменений и откат на стабильные конфигурации "/etc" в Linux'е с помощью Git

13 августа 2011 г. Ruslan Brest Linux » Howto » Git, SVNОбсудить

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

Решил добавить /etc в Git-репозиторий, чтобы получить все плюшки контроля версий. И, разумеется, оказалось, что я не слишком оригинален :)

Более подробно для интересующихся и сомневающихся это уже подробно описано ранее Антоном Чернышовым в статье Управление каталогом /etc с использованием tar и git.

См. также:

Распробовал Git

Распробовал Git: он действительно оказался во многом гораздо удобнее, чем SVN. В первый день мне не очень понравилась большая, чем в Subversion, атомарность действий и необходимость каждый раз добавлять изменённые файлы в коммит. Я понимал, что это сулит и чем может быть полезно, но сперва показалось неудобным: ты машина — ты и следи/добавляй, раз всё известно, зачем мне лишняя рутина? Позже у коммита обнаружился ключ -a вдобавок к "git add .", так что по этому поводу ворчать стало некуда. Ну а потом всё-таки понравился этот мелочный контроль (можно некоторые файлы держать у себя изменёнными для экспериментов и не пускать их в репозиторий).

Что нравится и заметно в первую очередь в Git после SVN, так это:

Далее...