Признания основного модификатора
Несколько уместных вопросов здесь:
Каков наилучший способ определить основные изменения и объединить их в модули? Есть ли бесплатная альтернатива http://www.fontis.com.au/mageaudit/ ?
Как насчет крючков предварительной фиксации subversion/git, чтобы предотвратить фиксацию в основных файлах? Вы вообще держите ядро Magento под контролем исходного кода?
Как можно предотвратить изменения основных файлов по ошибке - возможно, плагин Sublime Text это говорит вам, изменяете ли вы основной файл?
Можно ли скопировать основные файлы в /локальный, чтобы внедрить событие отправки для наблюдателей?
...просит a...друг. Да.
3 answers
Я не могу сказать, что мы когда-либо делали все возможное, чтобы предотвратить это, поскольку мы просто этого не делаем. Или наихудший сценарий (эльфы в трусах изменили ваш основной код) - вы увидите это в следующем 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
Просто дополнение к сообщению Sonassi Вы также можете использовать SVN-хук (если вы используете svn), чтобы проверить свойство только для чтения и отказаться от изменения файлов в определенных папках
Смотрите это -> http://www.cita.utoronto.ca /~широков/мягкий/svn-крючки/svn-только для чтения/предварительная фиксация
Вот как я подхожу к тем же проблемам:
-
Если я унаследую проект, в котором, как я подозреваю, есть основные хаки, я буду сравнивать файлы с vanilla Magento. Иногда я буду делать это при обновлении магазина до более новой версии. Следующая команда удобна для сравнения файлов в двух каталогах:
Разница -rq взломанный magento magento-1.7ish|grep "Только в взломанном magento"> hacks.txt
В настоящее время я использую SVN по целому ряду причин. У меня есть ваниль версии Magento, созданные в репозитории. Каждая версия находится в своей собственной ветке. Для новых проектов я включаю выбранную ветвь Magento в качестве внешней SVN. Я использую modman для упаковки любых расширений и тем в отдельные модули. Часто используемые расширения могут быть включены в мой проект в качестве дополнительных внешних SVN. Я фиксирую только свой файл проекта IDE, каталог modman и каталог магазина
etc
(перемещен выше httpdocs, путь обновлен в index.php ) в репо моего проекта.По включая основные файлы хранилища во внешнем SVN (с разрешениями только для чтения). Я не могу вносить какие-либо изменения в основные файлы.
Не копируйте весь файл (если это возможно). Расширьте базовый класс в локальном режиме и просто скопируйте метод, который вам нужно изменить.
Это просто мой подход к этим проблемам, который подходит как для моих собственных рабочих процессов, так и для рабочих процессов моего коллеги.