Правильное использование Git при разработке на WordPress

Вы же слышали про Git, верно? На сегодняшний день это одна из самых популярных систем контроля версий. Плюс ко всему, Git можно найти практически везде: он предустановлен многими хостинг-провайдерами, используется в качестве системы, работающей на GitHub и Bitbucket, а сейчас даже встроен в простые WordPress плагины. В этой статье я постараюсь рассказать, что за зверь этот Git и как с ним работать…

В последнее время в WordPress сообществе было много шума вокруг этой системы, из-за создания таких Git инструментов, как VersionPress, WP Pusher, Revisr и Gitium. Как и большинство других специалистов по WordPress, я являюсь фрилансером, который работает один-одинешенек 🙂  и никогда особо не уделял внимания контролю версий. Тем не менее, вся эта шумиха вокруг Git помогла осознать, что мне пора значительно подтянуть свои навыки и познания в Git области.

Возможно вы, как и я, являетесь специалистом в WordPress и разработчиком, который не до конца освоил Git или другую систему контроля версий. А, может быть, вы работаете в небольшой команде разработчиков, и поняли, что вашей команде нужен лучший способ отслеживания и контроля совместных проектов. Или вы, возможно, изучаете разработку под WordPress и хотите получше ознакомиться с Git, поэтому в данном случае разобраться в работе контролей версий – обязательное умение, которое необходимо каждому профессиональному разработчику.

Я изучил, как используют Git опытные WordPress разработчики, и доступные инструменты, с помощью которых легче совмещать Git и WordPress. В этой статье я также поделюсь с вами собственными наблюдениями, а также укажу ресурсы, облегчающие и помогающие начать работу с Git вкупе с WordPress.

Что представляет из себя Git?

Git — система контроля версий. Я уверен, что вы это уже знали, но как же он на самом деле работает?

Давайте посмотрим на простой пример действий Git, посредством которых он отслеживает создание и редактирование файла.

  1. Файл создается;
  2. Файл сохраняется;
  3. Файл редактируется;
  4. Изменения сохраняются.

Первые два шага совершаются один раз, а последние, как правило, много-много раз.

Что делает Git:

  • Отслеживает каждое сохраненное изменение;
  • Сохраняет «историю структуры» файла до и после внесения изменений;
  • Предоставляет возможность добавить информационную заметку, объясняющую причину каждого изменения.

В результате Git создает полную историю каждого изменения, внесенного в файл с момента его создания, с возможностью отката до любого прежнего состояния. Другими словами Git делает своего рода «слепки» из каждого изменения файла в отличии от того же SVN.

Отслеживаем целые проекты вместе с Git

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

Большинство таких веб-приложений, как WordPress, состоят из множества файлов, которые находятся в каталогах и в куче подкаталогов. Git может использоваться для отслеживания любого изменения в каждом из них. Помимо того, вы можете настроить Git так, чтобы он игнорировал отдельные каталоги и файлы.

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

Простая схема работы Git

Совместная работа через Git

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

Ветвление

Давайте представим, что вы работаете над проектом в команде. У вас возникла идея, которую вы хотите попробовать реализовать, но вы не хотите, чтобы весь проект двигался в этом направлении. С помощью Git это легко организовать. Вы можете просто создать новую ветку проекта, разработать свое решение, и после сбросить ее, если она не сработала. Если же все отлично, вы можете объединить ветку с первоначальным проектом, или сохранить ее в качестве совершенно нового проекта. Например изначально WordPress (прежде чем стать WordPress-ом) был создан как разветвление b2/cafelog. Изменили свое мнение насчет внесенных ранее правок? Не беда. История версий Git позволит откатиться и отменить все изменения.

Где находится Git?

Большинство рабочих процессов в Git включают в себя управление проектом между тремя разными локациями:

  • Локальная среда разработки: Здесь Git используется для отслеживания изменений во время работы над локальной копией проекта. При желании вы можете переместить проект на Git-хостинг, или оставить его локальным, если вы единственный, кто над ним работает;
  • Git-хостинг: GitHub и Bitbucket являются наиболее популярными Git-хостингами, но сейчас существуют и много других. Git-хостинг представляет собой место, где располагается основная версия проекта. Благодаря ему над разработкой могут трудиться сразу несколько человек;
  • Веб-сервер։ Если на сервере установлен Git, используйте SSH для клонирования репозитория с выбранного Git хостинга в каталог, в котором сайт будет находиться на веб-сервере. Сейчас все больше хостингов устанавливают Git даже на недорогих общих серверах.

Как WordPress разработчики используют Git?

Как выглядит процесс разработки под WordPress вместе с Git? Я задался этим вопросом и решил спросить его у своих знакомых топ WordPress разработчиков. В принципе я получил от всех одинаковые ответы, которые создают следующую общую схему:

  • Официальная версия сайта располагается в Bitbucket репозитории;
  • SSH используется для запуска командной строки и ввода команд слияния и отправки файлов между Bitbucket и сервером;
  • SourceTree (клиент с графической оболочкой для работы с Git) используется для локальных Git запросов обеспечивающих слияния или отправку файлов проекта между Bitbucket и локальной средой разработки;
  • Git, запущенный через SSH на веб-сервере и управляемый через SourceTree локально, используется для отслеживания изменений и слияния/отправки файлов. Помимо того, применяется дополнительный плагин WP Migrate DB Pro, дабы быть уверенным, что база данных без происшествий «мигрирует» туда и обратно.

Это не единственная модель использования Git и WordPress, но она достаточно универсальна. Схема может измениться за счет выбора других Git-хостингов и программных средств, используемых для взаимодействия с Git.

Проблемы при взаимодействии WordPress и Git

Есть некоторые проблемы, возникающие при совместной работе Git и WordPress:

  • Как быть с wp-config.php, если он отличается на локальном и продакшн (конечный сервер с проектом) серверах, а вы не хотите взаимодействовать с ними в общем репозитории?
  • Как быть с медиафайлами? Имеет ли смысл постоянно копировать их с продакшн сервера в локальную среду разработки?
  • Имеет ли смысл включить все ядро WordPress, сторонние темы и плагины в Git репозиторий, или следует ограничиться отслеживанием за собственными плагинами и изменениями в темах?
  • Как сохранить актуальную базу данных между локальными и продакшн серверами?

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

Выше я описал схему работы с Git по которой работает большинство моих знакомых WordPress разработчиков, но я не стал останавливаться и решил заняться «гугленьем» своего вопроса. Результат не заставил себя долго ждать и я нашел отличную презентацию (правда на английском языке), где автор описывает свой метод работы с Git в WordPress. Всю презентацию я естественно переписывать не буду, но вкратце напишу, что она не особо хороша по сравнению со схемой выше за исключением нескольких моментов, которые могут здорово сэкономить время.

В проект добавляется файл .gitignore, который «прячет» ненужные директории и файлы. Пример взятый из презентации:

/wp-content/themes/twenty*
/wp-content/upgrade
/wp-content/uploads
/sitemap.*
/wp-config.php
*.sql

*.DS_Store
*Thumbs.db
*.sass-cache*
*~imageoptim*

А также, в файл .htaccess добавляется специальный IfModule блок, который «заставляет» локальную версию выкачивать медиафайлы с веб-сервера. Пример из презентации:

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule wp-content/uploads/(.*) \
    http://{PROD}/wp-content/uploads/$1 [NC,L]
</IfModule>

Работа с .gitignore и . htaccess может быть не совсем понятна новичкам, но как только вы приобретете некоторый опыт работы с Git и PHP, то «магические» символы выше обретут для вас смысл.

Git инструменты

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

Графические Git клиенты

Git был изначально создан для запуска из командной строки, и многие разработчики до сих пор используют ее при работе с Git. Тем не менее, при желании вы можете избежать использования командной строки при локальной работе с Git. Если и Git, и командная строка «темный лес» для вас, использование GUI Git (GUI — графический пользовательский интерфейс) поможет упростить процесс изучения Git-а.

SourceTree является очень популярным и бесплатным Git клиентом, который интегрируется как с Bitbucket, так и с GitHub. GitHub Desktop— другая распространенная программа, но она работает только с GitHub. Есть множество других GUI Git, которые вы можете использовать. Только убедитесь, что клиент работает с тем Git хостингом, которым пользуетесь и вы.

Git-хостинги

Git-хостинг – это хранилище ваших Git репозиториев в веб-пространстве. Вам не обязательно использовать Git-хостинг. Вполне достаточно отправлять изменения с вашей локальной среды сразу на сервер с SSH, или просто использовать Git для локального контроля версии.

Использование Git-хостинга означает, что у вас имеется полная резервная копия файлов вашего веб-сайта в месте, где в любой момент можно легко отправить их на веб-сервер через SSH. Кроме того, если вы хотите работать с другим разработчиком, использование Git-хостинга сделает процесс управления и объединения изменений в проекте более легким.

Очевидно, что самым известным Git-хостингом является GitHub. Тем не менее, он является далеко не единственным выбором. На самом деле, его стоит выбирать только в том случае, если вас не смущает, что ваши репозитории находятся в публичном доступе. Или если вы согласны платить пару долларов каждый месяц за конфиденциальность.

Bitbucket — еще одно популярное решение, особенно для разработчиков, которые предпочитают частные репозитории. Другим распространенным вариантом является GitLab. Помимо того, есть множество дополнительных Git-хостингов в случае, если вам не особо нравятся GitHub, Bitbucket или GitLab.

Git инструменты (плагины) для WordPress

Вовсе не обязательно использовать какие-то специальные WordPress инструменты для взаимодействия с Git. Тем не менее, если вы только начинаете работать с ним, есть несколько вариантов, о которых вам стоит знать.


VersionPress

VersionPress

VersionPress создает Git репозиторий на веб-сервере вашего сайта и отслеживает каждое внесенное вами изменение. Он также добавляет специальную приборную панель в WordPress  админку. На ней имеется специальная кнопка, с помощью которой можно отменять любое изменение.

Вы можете использовать VersionPress для отмены любых совершенных вами правок, в том числе: откат ядра WordPress после обновления, отмена обновления плагина, или деинсталляция темы.

Стоит отметить, что VersionPress является еще достаточно «сырым» плагином и вам следует быть осторожным при его использовании.


Revisr

Revisr

Revisr очень похож на VersionPress, но с одним ощутимым отличием. VersionPress автоматически отслеживает каждое изменение, которое вы вносите в свой сайт, а Revisr отслеживает правки, которые вы фиксируете в репозитории Git вручную. Revisr является полностью готовым к использованию продуктом, доступным в каталоге плагинов WordPress

Revisr лучше запускать в случае, если вы желаете применять его в качестве резервного плагина, использующего репозиторий Git для хранения резервной копии сайта.

Revisr имеет возможность отслеживания изменений в базе данных, но плагин не способен объединять две версии базы данных. Тем не менее, в отличии от VersionPress, Revisr является уже готовым продуктом, а это означает, что с последним у вас возникнет гораздо меньше проблем, по сравнению с пока что «сырым» релизом VersionPress.


Gitium

Gitium

Если углубиться, то ядро WordPress уже находится под контролем версий. Вдобавок, оно хранит историю изменений всех страниц и постов. Что же остается? Верно, плагины и темы. Именно с ними вам поможет Gitium. Gitium, разработанный Presslabs, предоставляет посредством Git историю изменений в плагинах и темах прямо в админке WordPress. Все установки плагинов, изменения кода и обновления автоматически отслеживаются и отправляются в выбранные вами репозитории, например, в Bitbucket или GitHub. 


WordPress GitHub Sync

WordPress GitHub Sync

WordPress GitHub Sync сохраняет историю правок контента в GitHub репозитории. Это особенно полезно в случае, если у вас есть контент, который модифицируется разными пользователями, так как каждое изменение будет приписано тому авторизованному пользователю, который и внес правки. Вы даже можете использовать плагин для принятия предложений читателей, сделанных через GitHub.

Если вы хотите использовать WordPress GitHub Sync, вам также понадобится установить WP-Markdown, который конвертирует ваши посты из HTML в markdown для более усовершенствованной визуализации и упрощенного синтаксиса при просмотре на GitHub


WP Pusher

WP Pusher

WP Pusher соединяет ваш WordPress сайт с WordPress плагином или темой в GitHub репозитории. Это в разы упрощает установку и обновление WordPress плагинов и тем, которые загружены на GitHub.

WP Pusher условно-бесплатный плагин, если ваши плагины и темы размещаются в репозиториях GitHub. При работе с приватными репозиториями требуется приобретение лицензии.

Итог

WordPress постоянно развивается и это факт. Он давно уже трансформировался из примитивной блог-платформы в мощную и разностороннюю CMS. Интегрирование контроля версий в работу WordPress является отличным шагом для развития платформы и если вы хотите «быть в теме» касательно WordPress, то вы должны обязательно освоить Git. И если вы прочитали до конца мою статью, то вы уже сделали первый и важный шаг к этому.

В дальнейшем постарайтесь отвести время на изучение Git в целом и начните использовать Git в своем рабочем процессе не только с WordPress, но и с другими CMS и проектами. 

Подписаться на новые статьи