Признания основного модификатора
-
16-10-2019 - |
Вопрос
Здесь несколько уместных вопросов:
Каков наилучший способ определить основные изменения и объединить их в модули?Есть ли бесплатная альтернатива http://www.fontis.com.au/mageaudit/ ?
Как насчет перехватов subversion / git с предварительной фиксацией, чтобы предотвратить фиксацию основных файлов?Вы вообще держите Magento core под контролем исходных текстов?
Как можно предотвратить внесение изменений в основные файлы по ошибке - возможно, с помощью плагина Sublime Text, который сообщает вам, изменяете ли вы основной файл?
Можно ли скопировать основные файлы в / local, чтобы внедрить событие отправки для наблюдателей?
...спрашиваю о ...друге.Да.
Решение
Я не могу сказать, что мы когда-либо делали все возможное, чтобы предотвратить это, поскольку мы просто этого не делаем.Или наихудший сценарий (эльфы в трусах изменили ваш основной код) - вы видите это при следующем коммите Git, который вы выпускаете.
Но я думаю, есть несколько способов устранить / предотвратить это.Итак, просто поподробнее остановлюсь на ваших основных моментах.
Поиск модификаций
Идентифицировать изменения довольно просто, просто загрузите чистый эквивалентный релиз и выполните diff
в соответствующих каталогах.
diff -r ./app/code/core ./clean_mage/app
Вы можете найти более подробные рекомендации в Ответ на отладку Magento.
Предотвращение изменений
Вы могли бы предотвратить внесение изменений в ядро, просто изменив права доступа к файлам, сделав их доступными только для чтения / выполнения
chmod -R 555 ./app/code/core
Или пойти еще дальше и сделать их неизменяемыми
chattr +i -R ./app/code/core
Отмена изменений в режиме реального времени
Если вы используете Git, и ваше ядро находится под контролем версий, вы могли бы добавить перехват только для проверки ядра перед фиксацией
.git/hooks/pre-commit
#!/bin/bash
git checkout /home/path/public_html/app/code/core
Использование локального
На самом деле, это последнее средство.Путь включения PHP (это не относится к Magento) не позволит вам дважды объявлять один и тот же класс.
Местное > Сообщество > Ядро
Итак, в тот момент, когда вы добавляете класс в local
, соответствующий соответствующий файл не будет прочитан ни из какого другого места.Таким образом, вам нужно скопировать все содержимое файла.
Для abstract/final
классы - у вас нет особого выбора, но для большинства других задач вы обычно можете переписать класс и объединить его в модуль в community
Другие советы
Просто дополнение к сообщению Сонасси. Вы также можете использовать крюк SVN (если вы используете SVN), чтобы проверить свойство только для чтения и отказаться от изменений в определенных папках
Смотрите это ->http://www.cita.utoronto.ca/~shirokov/soft/svn-moks/svn-read-only/pre-commit
Вот как я подхожу к тем же вопросам:
Если я унаследовал проект, который, как я подозреваю, имеет основные хаки, я сравню файлы с ванильным Magento. Иногда я буду делать это при обновлении магазина до более новой версии. Следующая команда удобна для сравнения файлов в двух каталогах:
Diff -RQ Magento-Hacked Magento-1.7ish | grep "только в магоне"> chacks.txt
В настоящее время я использую SVN по разным причинам. У меня есть ванильные версии Magento, установленные в репо. Каждая версия находится на собственном филиале. Для новых проектов я включаю избранную отделение Magento в качестве внешнего SVN. я использую Модман упаковать любые расширения и темы в отдельные модули. Часто используемые расширения могут быть включены в качестве дополнительных внешних SVN в моем проекте. Я только посвятил свой файл проекта IDE, каталог Modman и магазин
etc
Справочник (перемещен выше HTTPDOCS, PATH обновлен в index.php) в репо моего проекта.Включив основные файлы магазина во внешнее SVN (с чтением только Perms). Я не могу внести какие -либо изменения в основные файлы.
Не копируйте весь файл (если возможно). Расширьте класс Core в Local и просто скопируйте метод, который вам необходимо изменить.
Это только мой подход к этим проблемам, который подходит как мои собственные, так и рабочие процессы моего коллеги.