.note | CVS
Откровенно был удивлён, что многие «разработчики» понятия не имеют о том, что такое CVS (Concurrent Version System). У некоторых маразм «непонимания» доходит до того, что они начинают изобретать своё колесо «авто-обновления кода» с нуля. Что тут говорить: далеко на этом поприще им не уйти, потому как лучше CVS (или, в последнее время SVN) это сделать довольно сложно.
Расписывать тут все преимущества систем контроля версий я не собираюсь, потому как про это достаточно написано в сети. Хотелось бы лишь обратить внимание на одну приятную особенность обновления PHP кода через команду “cvs update”.
Если вы внесли какие-либо изменения в код программы, то они не будут затронуты при обновлении. Точнее говоря, обновятся те части файла, которые вы не меняли. Капиш? Нет! Ну вот простой пример:
Скажем был у нас такой код в дистрибутиве:
<?
…
$names = array(“Петя”, “Вася”, “Миша”, “Эммануель”);
foreach($names as $name){
echo $name . ‘<br />’;
}
…
?>
Нам, вот, почему-то не нравится «Эммануель» да и вообще, туда надо бы дополнить других имён – соответственно мы открываем файлик и пишем туда то, что нам нравится, и получаем вот что:
<?
…
$names = array(
“Петя”,
“Вася”,
“Миша”,
“Инга”,
“Петра”,
“Мария”);
foreach($names as $name){
echo $name . ‘<br />’;
}
…
?>
Проходит какое-то время, и разработчики анонсируют выход новой версии программы. Мы сразу бежим в «шелл» и выполняем команду “cvs update”. Обновится и наш файлик, нам, конечно, будет казаться, что имена придётся редактировать снова! Ан нет, как только мы его откроем, то увидим там вот что:
<?
…
$names = array(
“Петя”,
“Вася”,
“Миша”,
“Инга”,
“Петра”,
“Мария”);
//this loop changed a little, please note!
foreach($names as $key => $name){
echo $key . ‘ - ’ . $name . ‘ дурит часто!<br />’;
}
…
?>
Вот какие приятные чудеса бывают на этой планете!

gray
1. Если не ошибаюсь, автообновление в Бирмановском e2 выполняет немного другую роль. Скорее, нечто вроде "apt-get update && apt-get upgrade".
2. Если я правильно понял, то не SVS, а SVN. И, кстати, далеко не все от него "фанатеют" - такие вещи, как цельность версий всего проекта, некоторым кажется неудобной штукой по сравнению с контролем версий отдельных файлов.
08.08.2005 // 14:26 [ ссылка ]
Ответ от Автора
1. Да, конечно, первичная функция «авто-обновления» — это, безусловно, контроль СУБД, мне в ЖЖ уже на это указали. Тем не менее, Бирман делает не систему «пакетов», а именно систему котроля версий кода.
2. Пардон, опечатка — уже исправил. А так да, каждой задаче свой инструментарий!
08.08.2005 // 15:24 [ ссылка ]
gray
Кстати, к вопросу о базе. Традиционный подход веб-разработчиков, использующих CVS или SVN - хранить "чистый" дамп в дереве исходников проекта, а по мере необходимости хранить также руками сделанные diff'ы. То есть, ALTER TABLE foobar... и понеслось. "Накладывается" такой diff тоже руками.
Конечно, это не всегда удобно, но (в целом) оправдывает себя: как правило, база проектируется единожды, её структура меняется редко (и в мелочах - расширить какое-то поле, добавить необязательное поле...), а вот кардинальные изменения базы подразумевают серьёзные архитектурные изменения всего проекта.
P.S. /* $Header$ */ ;-)
08.08.2005 // 16:08 [ ссылка ]
Kolo
А я все-равно как упрямый осел буду сливать регулярно новую версию руками, смотреть что изменилось и то что понравится ставить себе.
Так интереснее...
08.08.2005 // 21:35 [ ссылка ]
Baka
> и получаем вот что:
> ...
... если разработчикам не пришла в голову мысль поменять заодно и список имён. ^_^
09.08.2005 // 05:26 [ ссылка ]