.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 />;
}
…
?>

Вот какие приятные чудеса бывают на этой планете!

Top

Слова: coding, internet, php

Комментарии Отключены

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 [ ссылка ]