Расширение для 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

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


person Kaivosukeltaja    schedule 11.10.2011    source источник
comment
Я могу только представить, что это будет очень сложный плагин для написания при сохранении производительности ... в то время как самой проблемы можно избежать, не предоставляя всем доступ к живым средам, черт возьми, если вам нужно внести изменения в живую среду вне версии вы, вероятно, делаете что-то не так (в своем рабочем процессе)...   -  person sg3s    schedule 11.10.2011
comment
Я согласен, никто не должен ничего трогать в живой среде, и наш рабочий процесс строго запрещает делать это без очень веской причины. Тем не менее, это случается — может быть, потому, что определение веских причин сильно различается от человека к человеку.   -  person Kaivosukeltaja    schedule 11.10.2011
comment
Ваши коллеги используют антишаблон дженга. Подробнее см. The Daily WTF: Правильное управление релизами. Чтобы применить Subversion, используйте предложение JB Nizet об использовании экспорта SVN и установите его для перезаписи файлов сервера. Чья-то работа потерялась? Черт возьми, они не смогли следить за процессом. Если что-то действительно срочное, скажите им изменить исходники в помеченной ветке и уведомить менеджера проекта, чтобы он навел порядок (т. е. потребуется новый тег, а старый тег больше не чист).   -  person JBert    schedule 12.10.2011


Ответы (2)


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

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

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

person JB Nizet    schedule 11.10.2011
comment
Мы уже помечаем ревизии и используем их в процессе обновления, но они все еще могут конфликтовать, если на сервере есть локальные изменения. Их даже невозможно обнаружить при тестировании изменений в среде интеграционного тестирования. Нам также нужно разрешить доступ на запись к файлам, иначе svn switch тоже не сможет их трогать. - person Kaivosukeltaja; 11.10.2011
comment
Не заставляйте сервер обслуживать файлы из рабочей копии. Заставьте его обслуживать файлы из экспортированной рабочей копии с ограниченным доступом к файлам. - person JB Nizet; 11.10.2011

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

Из головы

svn up --accept theirs-full

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

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

person sg3s    schedule 11.10.2011