Расширение для PHP, чтобы игнорировать конфликты SVN

#php #svn #conflict

#php #svn #конфликт

Вопрос:

switch Я уверен, что я не единственный, кто пытался внести последние изменения в код на реальном сервере из SVN непосредственно перед тем, как отправиться домой, только чтобы обнаружить, что какой-то болван изменил файлы непосредственно на сервере, и теперь у вас есть пять PHP-скриптов, помеченных как конфликтующие, сайт не работает, и на вас кричатна вашей жене за опоздание на ужин, потому что вам пришлось разрешать все конфликты вручную, потому что об откате не может быть и речи.

Я думаю, было бы здорово, если бы существовало расширение для PHP, которое не умирало бы с ошибкой синтаксического unexpected T_SL анализа при обнаружении конфликтующего файла, а вместо этого анализировало бы его, используя только рабочую версию копии каждого конфликта.

 <<<<<<< .mine
changes_my_stupid_coworker_made(); // This would be executed
=======
my_important_changes(); // This would NOT be executed
>>>>>>> .r9
  

Существует ли такое расширение или что-то, что может быть использовано пользователем для аналогичного эффекта?

Комментарии:

1. Я могу только представить, что это будет очень сложный плагин для написания при сохранении производительности… хотя самой проблемы можно избежать, не предоставляя всем доступ к живой среде, черт возьми, если вам нужно внести изменения в живую среду вне системы контроля версий, вы, вероятно, делаете что-то неправильно (в своем рабочем процессе)…

2. Я согласен, никто не должен ничего трогать в живой среде, и наш рабочий процесс строго запрещает делать это без очень веской причины. Тем не менее, это происходит — возможно, потому, что определение «веской причины» сильно варьируется от человека к человеку.

3. Ваши коллеги используют анти-шаблон «дженга». Смотрите Ежедневный WTF: управление выпуском сделано правильно для получения информации об этом. Чтобы принудительно использовать Subversion, используйте предложение JB Nizet об использовании SVN Export и установите его для перезаписи файлов сервера. Чья-то работа потерялась? Черт возьми, они не смогли следовать процессу. Если что-то действительно срочно, скажите им, чтобы они изменили исходные тексты в «помеченной» ветке и уведомили менеджера проекта, чтобы он наладил беспорядок (т. Е. Потребуется новый тег, а старый тег больше не «чистый»).

Ответ №1:

Это действительно был бы худший способ решения проблемы.

  • Никогда не позволяйте никому редактировать файлы непосредственно на сервере. Файлы могут быть доступны только для чтения (или виновник может быть уволен)
  • Не обновляйте сервер напрямую из репозитория SVN: обновите рабочую копию, запустите все модульные и интеграционные тесты на этой рабочей копии, затем пометьте ревизию и экспортируйте рабочую копию на сервер

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

Комментарии:

1. Мы уже помечаем ревизии и используем их в процессе обновления, но они все еще могут конфликтовать, если на сервере есть локальные изменения. Они даже не могут быть обнаружены при тестировании изменений в среде тестирования интеграции. Нам также необходимо разрешить доступ на запись к файлам, потому что в противном svn switch случае их тоже нельзя было бы трогать.

2. Не заставляйте сервер обслуживать файлы из рабочей копии. Заставьте его обслуживать файлы из экспортированной рабочей копии с ограниченным доступом к файлам.

Ответ №2:

Попробуйте обновить текущую среду, принудительно используя их -полная, все еще может вызвать проблемы (см. Предыдущий комментарий), но это предотвращает возникновение конфликтов. С этого момента вы можете работать над тем, чтобы не вносить изменения в живую среду за пределами контроля версий.

Из головы

 svn up --accept theirs-full
  

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

Это довольно аккуратно, предотвращает ужасные сбои и действительно поздние ночи.