В процессе разработки и поддержки сайта часто возникает необходимость в отслеживании истории изменений какого-либо файла и, возможно, в откате, то есть возвращении к более старой версии файла.
Необходимость эта может во многих случаях, вот некоторые из них:
Более правильным способом будет использование систем контроля версий таких так subversion или git. Они всем хороши, но, к сожалению, не на каждый хостинг их поставишь, а даже если поставишь, то работать с ними придется через коммандную строку, что не очень удобно.
Решением этих проблем (не всех, но многих) может стать новый модуль “”. Если вы знаете, что такое svn, то этот модуль представляет из себя примерно то же самое, только попроще (пока что, планы по развитию наполеоновские), но зато встроено в админку битрикса.
На данный момент модуль умеет:

Как видно на скриншоте, нужно указать директорию, в которой будет производиться поиск файлов, расширения файлов, которые будут помещаться в репозиторий, а также поддиректории, в которых нужно и в которых не нужно искать файлы.
При установке модуля автоматически настраиваются несколько источников - ядро (то есть то, что лежит в папке /bitrix), а также по одному источнику на каждый заведенный в системе сайт. Их можно использовать по умолчанию - туда попадут шаблоны, самописные компоненты, а также публичные части сайтов системы.
Итак, после того, как источники данных настроены, можно приступать к работе с модулем. Отправной точкой послужит пункт меню “Проверка изменившихся файлов” .

Сначала нужно выполнить проверку источников данных на изменения (красная стрелочка 1 на скриншоте), в процессе которой будут найдены все новые, изменившиеся и удаленные файлы. Результаты проверки будут представлены здесь же.
Дальше нужно поработать с результатами проверки, то есть решить, какие изменившиеся файлы достойны занесения в репозиторий, а какие нет.
Также здесь можно обнаружить файлы, которые нужно “вернуть как было” и тут же восстановить их в источнике из репозитория.
Те файлы, которые изменились в источнике, но которые пока нет нужды заносить в репозиторий можно удалить из результатов проверки.
У новых файлов можно посмотреть содержимое, а у удаленных - последнее содержимое из репозитория.
У измененных же файлов можно что конкретно изменилось

Зеленым цветом подсвечены строки, которые появились, а красным - которые были удалены.
После того, как определен список файлов, достойный занесения в репозиторий, нужно зафиксировать (сохранить) эти изменения в репозитоирии (зеленая стрелочка 2). При сохранении нужно будет обязательно ввести описание сохраняемых изменений.
В результате будет создана новая ревизия. Каждая ревизия получает свой порядковый номер (ID). Номер новой ревизии всегда больше номера прпедыдущей.
При первом использовании модуля репозиторий будет пустой, поэтому все файлы, найденные в результате проверки, будут новыми.

Следующим пунктом, про который нужно рассказать это “Файлы в репозитории”. Как понятно из названия это список всех файлов хранящихся в репозитории с возможностью разнообразной фильтрации.
Здесь можно посмотреть текущее содержимое файла в репозитории, изменения файла с предыдущей ревизии, перейти в историю изменений файла.
“Первая ревизия” - это номер ревизии, в которой файл был добавлен в репозиторий.
“Ревизия” - это номер ревизии в которой файл последний раз изменялся.
“Количество ревизий” - это число, показывающее в скольких ревизиях файл изменялся.
При удалении из репозитория фактически файл не удаляется, просто помечается удаленным и при проверке на изменения более не учитывается. Вся его история изменений в репозитории остается.

Далее идет пункт меню “Ревизии”. Это, банально, список всех ревизий.
Можно перейти к просмотру файлов, входящих в ревизию, а можно восстановить все файлы измененные после данной ревизии - то есть переписать их в источнике такими, какими они были в выбранной ревизии.
Есть в модуле приятная фишка для разработчиков модулей для Marketplace. С ее помощью можно выгрузить список файлов, изменившихся после определенной ревизии

И мало того, что только выгрузить, так еще и проделать над этими файлами всякие действия, для этого есть специальное событие OnDriverAfterExport. У меня для сборки обновлений модуля в init.php прописан такой код:
Здесь языковые файлы перекодируются в кодировку Win1251, а также из выгрузки удаляются всякие служебные скрипты.
Еще в настройках модуля можно включить отображение специального меню в панели в пользовательской части сайта

"Создание точки восстановления" - это комбинация кнопок "Проверить на изменения" и "Зафиксировать изменения" из проверки на измененияю, а "Откат к предыдущей точке" восстанавливает из репозитория все файлы изменившиеся с последней ревизии.
Напоследок, о планах развития модуля на ближайшее время:
Необходимость эта может во многих случаях, вот некоторые из них:
- Понадобилось сделать кратковременное изменение дизайна (например, под новый год)
- Редактор сайта случайно испортил какую-нибудь страницу (а то и не одну) и нужно “вернуть, как раньше было”
- Не дай бог завелся вирус, который записался в кучу файлов и теперь нужно найти все эти файлы и вернуть их в исходное состояние.
- Год назад из дизайна удалили кусок, решив, что он больше не пригодится, но он таки вдруг понадобился.
- До работы с сайтом допустили посторонних людей (например, seo-оптимизаторов), которые внесли свои изменения и нужно проверить, что же они в действительности поменяли.
Более правильным способом будет использование систем контроля версий таких так subversion или git. Они всем хороши, но, к сожалению, не на каждый хостинг их поставишь, а даже если поставишь, то работать с ними придется через коммандную строку, что не очень удобно.
Решением этих проблем (не всех, но многих) может стать новый модуль “”. Если вы знаете, что такое svn, то этот модуль представляет из себя примерно то же самое, только попроще (пока что, планы по развитию наполеоновские), но зато встроено в админку битрикса.
На данный момент модуль умеет:
- помещать в свое хранилище (репозиторий) файлы из настроенных источников данных, то есть из определенных папок на диске (см. ниже)
- находить файлы, которые изменились по сравнению с последней версией, помещенной в репозиторий
- показывать, что же изменилось в файле
- помещать в репозиторий новую версию файла(ов) - это называется создать новую ревизию
- по вашей просьбе восстанавливать файл из любой предыдущей ревизии
- показывать историю изменений (ревизий) файла
- добавлять в верхнюю панель кнопку для быстрого создания точки восстановления и отката к последней созданной точке восстановления
- выгружать файлы, изменившиеся после определенной ревизии (поможет разработчикам модулей для Marketplace при сборке обновлений)

Как видно на скриншоте, нужно указать директорию, в которой будет производиться поиск файлов, расширения файлов, которые будут помещаться в репозиторий, а также поддиректории, в которых нужно и в которых не нужно искать файлы.
При установке модуля автоматически настраиваются несколько источников - ядро (то есть то, что лежит в папке /bitrix), а также по одному источнику на каждый заведенный в системе сайт. Их можно использовать по умолчанию - туда попадут шаблоны, самописные компоненты, а также публичные части сайтов системы.
Итак, после того, как источники данных настроены, можно приступать к работе с модулем. Отправной точкой послужит пункт меню “Проверка изменившихся файлов” .

Сначала нужно выполнить проверку источников данных на изменения (красная стрелочка 1 на скриншоте), в процессе которой будут найдены все новые, изменившиеся и удаленные файлы. Результаты проверки будут представлены здесь же.
Дальше нужно поработать с результатами проверки, то есть решить, какие изменившиеся файлы достойны занесения в репозиторий, а какие нет.
Также здесь можно обнаружить файлы, которые нужно “вернуть как было” и тут же восстановить их в источнике из репозитория.
Те файлы, которые изменились в источнике, но которые пока нет нужды заносить в репозиторий можно удалить из результатов проверки.
У новых файлов можно посмотреть содержимое, а у удаленных - последнее содержимое из репозитория.
У измененных же файлов можно что конкретно изменилось

Зеленым цветом подсвечены строки, которые появились, а красным - которые были удалены.
После того, как определен список файлов, достойный занесения в репозиторий, нужно зафиксировать (сохранить) эти изменения в репозитоирии (зеленая стрелочка 2). При сохранении нужно будет обязательно ввести описание сохраняемых изменений.
В результате будет создана новая ревизия. Каждая ревизия получает свой порядковый номер (ID). Номер новой ревизии всегда больше номера прпедыдущей.
При первом использовании модуля репозиторий будет пустой, поэтому все файлы, найденные в результате проверки, будут новыми.

Следующим пунктом, про который нужно рассказать это “Файлы в репозитории”. Как понятно из названия это список всех файлов хранящихся в репозитории с возможностью разнообразной фильтрации.
Здесь можно посмотреть текущее содержимое файла в репозитории, изменения файла с предыдущей ревизии, перейти в историю изменений файла.
“Первая ревизия” - это номер ревизии, в которой файл был добавлен в репозиторий.
“Ревизия” - это номер ревизии в которой файл последний раз изменялся.
“Количество ревизий” - это число, показывающее в скольких ревизиях файл изменялся.
При удалении из репозитория фактически файл не удаляется, просто помечается удаленным и при проверке на изменения более не учитывается. Вся его история изменений в репозитории остается.

Далее идет пункт меню “Ревизии”. Это, банально, список всех ревизий.
Можно перейти к просмотру файлов, входящих в ревизию, а можно восстановить все файлы измененные после данной ревизии - то есть переписать их в источнике такими, какими они были в выбранной ревизии.
Есть в модуле приятная фишка для разработчиков модулей для Marketplace. С ее помощью можно выгрузить список файлов, изменившихся после определенной ревизии

И мало того, что только выгрузить, так еще и проделать над этими файлами всякие действия, для этого есть специальное событие OnDriverAfterExport. У меня для сборки обновлений модуля в init.php прописан такой код:
AddEventHandler("karudo.vcs", "OnDriverAfterExport", "OnDriverAfterExport");
function OnDriverAfterExport($doc_root, $driver_code, $arFiles) {
global $APPLICATION;
if ('karudo_vcs' !== $driver_code) {
return;
}
foreach ($arFiles as $i) {
if (false !== strpos($i, '/lang/ru/')) {
if (file_exists($doc_root . $i)) {
$str = file_get_contents($doc_root . $i);
$str = $APPLICATION->ConvertCharset($str, 'UTF-8', 'CP1251');
file_put_contents($doc_root . $i, $str);
}
}
if (false !== strpos($i, '/install/js/')) {
if (false === strpos($i, 'compiled.js')) {
unlink($doc_root . $i);
}
}
}
}
|
Еще в настройках модуля можно включить отображение специального меню в панели в пользовательской части сайта

"Создание точки восстановления" - это комбинация кнопок "Проверить на изменения" и "Зафиксировать изменения" из проверки на измененияю, а "Откат к предыдущей точке" восстанавливает из репозитория все файлы изменившиеся с последней ревизии.
Напоследок, о планах развития модуля на ближайшее время:
- сохранение свойств инфоблоков в репозитории
- сохранение элементов инфоблоков в репозитории
- возможность синхронизации репозиториев между двумя разными битриксами
- возможно вы предложите какую-нибудь идею?
