Изначально был выбран Denwer, не по воле моей, а по принуждению... :) Шучу. Жека спасибо! Так что, от него и будем отталкиваться.
Качаем TortoiseSVN последней версии тут http://tortoisesvn.net/downloads. Когда я качал, версия была 1.6.7. Тут внимательнее потому, что для других версий информация в статье может быть не совсем актуальная - и за за этого часто уходят часы времени, а все получается лишь после полного удаления всего установленного и попытки сделать все с чистого листа.
На рисунке я подчеркнул ту информацию, которая нам понадобится в будущем, а именно версия Subversion (не записав которую, пришлось поиграться вчера 2 часа) и версия Тортилки (TortoiseSVN). Последнее скорее для вас, чтобы быть в курсе об чем в статье.
Установка классическая - указать имя папки, Next, Next, ..., Finish. Проблем быть не должно. При запуске видим это окно и жмем Next:
Дальше читаем и соглашаемся (или не соглашаемся) с условиями использования программы:
Выбираем папку в которую хотим установить (у меня места на C: нет, потому я ставлю все на D:, но это не существенно). После жмем Next:
Жмем Install:
Пока идет установка, мы можем нажать на Donate и помочь проекту.
Когда установка завершена жмем Finish:
А на предложение перезагрузить компьютер соглашаемся (или сохраняем все что надо и перегружаем).
Сейчас у нас есть выбор создавать ли локальный репозиторий или удаленный. Т.к. я единственный кто правит проект - мне достаточно иметь локальный репозиторий и TortoiseSVN позволяет это сделать.
Создаем папку, в которой будет располагаться репозиторий. Эту папку хорошо бы спрятать подальше от глаз (чтобы случайно не удалить), а вообще лучше вынести на другой винчестер (не тот, на котором располагается проект). Я ее создал на своем переносном винчестере. Если теперь вызвать контекстное меню новой папки (кликнуть на папке правой кнопкой мыши), то мы увидим два новых пункта меню "SVN Checkout" и "TortoiseSVN". Нас интересует пока второй. В подменю выбираем "Create repository here".
В результате TortoiseSVN создаст там свой порядок.
Теперь нам стоит вызвать контекстноеменю папки репозитория и Вызвать "Repository Browser" (кликаем правой кнопкой мыши по пустому месту на папке, в меню выбираем "TortoiseSVN", а потом "Repository Browser")
Откроется диалог, который покажет внутреннюю структуру репозитория. Вызовем контекстное меню корневой папки репозитория и выберем пункт меню "Add folder..."
Выбираем папку с нашим проектом и жмем Ок
Дописываем комментарий к первой ревизии проекта и жмем Ок.
После ждем пока тортилка добавляет файлы
Процесс может занять несколько минут (или десятков - зависит от исходного размера проекта), возможно даже будет казаться, что все зависло. Главное ничего не предпринимать, а спокойно дождаться окончания. Чтобы немного успокоиться и увидеть, что процесс все таки идет - можно наблюдать за увеличением размера папки с репозиторием. Когда размер перестанет обновляться, а диалог диалог исчезнет - картинка в Repository Browser немного поменяется.
Наконец-то! Смотрим все ли нормально. Тут есть один важный момент, из за которого у меня ушло много времени. Оказывается при импорте папки тортилка халтурит. Как в первый раз, так и во второй (когда писал статью) программа не добавила файлы типа *.so, без которых Apache не запустится. Причина мне не ясна, но факт остается фактом - нам придется в ручную добавить эти файлы в репозиторий с помощью Repository Browser.
В Denwer файлы размещены в папке "D:\WebServers\usr\local\apache\modules". найдем ту же папку в браузере и перетянем их из Windows Explorer в Repository Browser. После перетаскивания файлов появится контекстное меню, в котором надо выбрать "Copy files here"
А если тортилка чего-то там спросит, сказать что "Да я уверен" - кажется она предлагает какой-то более оптимальный способ добавлять файлы.
Сейчас у нас есть выбор создавать ли локальный репозиторий или удаленный. Т.к. я единственный кто правит проект - мне достаточно иметь локальный репозиторий и TortoiseSVN позволяет это сделать.
Создаем папку, в которой будет располагаться репозиторий. Эту папку хорошо бы спрятать подальше от глаз (чтобы случайно не удалить), а вообще лучше вынести на другой винчестер (не тот, на котором располагается проект). Я ее создал на своем переносном винчестере. Если теперь вызвать контекстное меню новой папки (кликнуть на папке правой кнопкой мыши), то мы увидим два новых пункта меню "SVN Checkout" и "TortoiseSVN". Нас интересует пока второй. В подменю выбираем "Create repository here".
В результате TortoiseSVN создаст там свой порядок.
Теперь нам стоит вызвать контекстноеменю папки репозитория и Вызвать "Repository Browser" (кликаем правой кнопкой мыши по пустому месту на папке, в меню выбираем "TortoiseSVN", а потом "Repository Browser")
Откроется диалог, который покажет внутреннюю структуру репозитория. Вызовем контекстное меню корневой папки репозитория и выберем пункт меню "Add folder..."
Выбираем папку с нашим проектом и жмем Ок
Дописываем комментарий к первой ревизии проекта и жмем Ок.
После ждем пока тортилка добавляет файлы
Процесс может занять несколько минут (или десятков - зависит от исходного размера проекта), возможно даже будет казаться, что все зависло. Главное ничего не предпринимать, а спокойно дождаться окончания. Чтобы немного успокоиться и увидеть, что процесс все таки идет - можно наблюдать за увеличением размера папки с репозиторием. Когда размер перестанет обновляться, а диалог диалог исчезнет - картинка в Repository Browser немного поменяется.
Наконец-то! Смотрим все ли нормально. Тут есть один важный момент, из за которого у меня ушло много времени. Оказывается при импорте папки тортилка халтурит. Как в первый раз, так и во второй (когда писал статью) программа не добавила файлы типа *.so, без которых Apache не запустится. Причина мне не ясна, но факт остается фактом - нам придется в ручную добавить эти файлы в репозиторий с помощью Repository Browser.
В Denwer файлы размещены в папке "D:\WebServers\usr\local\apache\modules". найдем ту же папку в браузере и перетянем их из Windows Explorer в Repository Browser. После перетаскивания файлов появится контекстное меню, в котором надо выбрать "Copy files here"
А если тортилка чего-то там спросит, сказать что "Да я уверен" - кажется она предлагает какой-то более оптимальный способ добавлять файлы.
Добавляем комментарий и "коммитим" новую ревизию.
Раз уж тортилка один раз заглючила - гарантии, что она это сделала где-то еще раз нет. Придется проверять.
Идем в папку, где находится Denwer. Старую его копию можно забекапить (сохранить) на всякий пожарный. Вызываем контекстное меню папки (у меня Denwer был установлен на диск D:) и в меню выбираем "SVN Checkout..."
В диалоге редактируем путь в репозитории откуда делаем чекаут "Checkout" и путь куда мы его делаем. После жмем Ок.
После этого мы будем некоторое время наблюдать как переписываются все файлы проекта.
А когда проект (папка Denwer'a) будет скопирован, нажмем Ок.
Можно оглядеться. Новая папка и ее содержимое будет выглядеть немного иначе. + в каждой подпапке будет находится скрытая папка ".svn" в которой хранится служебная информация. К ним мы еще раз вернемся немного позже.
Теперь нам надо сделать ту самую проверку, а не заглючила ли тортилка еще раз? Сделаем копию новой папки рядом с исходной.
После удалим все папки ".svn" внутри - эти папки единственное, что отличает новую папку от исходной (которую мы сохранили как бекап). Удалить можно нажав на поиск (F3) внутри новой папки и найдя все скрытые папки ".svn".
В результатах поиска можно будет видеть все эти папки. Удалим все.
Удалив их мы сможем сравнить две папки: ту с корой все началось, и ту, которую мы только что отредактировали. В лучшем случае количество файлов, папок и общий размер (до последнего байта) будет одинаковый. Если нет - придется отыскать все отличия и сделать все то, что мы сделали с файлами типа *.so выше. Надеюсь ты увидел такую картинку.
Если так, то можно спрятать бекап куда подальше, а копию с удаленными папками ".svn" удалить.
Все казалось бы готово для работы, но есть одно но. Denver (той версии, что я скачал) не расчитан для работы с SVN, а именно он не понимает папки ".svn", которые лежат теперь где не лень. Чтобы научить его игнорировать эти папки, придется немного покопаться в кишках Denwer.
Нас интересуют два файла. D:\WebServers\denwer\scripts\Control.pl и D:\WebServers\denwer\scripts\init.d\apache.pl.
В файле Control.pl необходимо найти и изменить строку с такой:
next if $e eq ".." || $e eq "." || uc $e eq 'CVS';на такую:
next if $e eq ".svn" || $e eq ".." || $e eq "." || uc $e eq 'CVS';Так Denwer не будет пытаться сделать из папки ".svn" виртальный хост.
В файле apache.pl необходимо найти и изменить строку с такой:
my $exe = fsgrep { /\Q$CNF{apache_exe}\E/i } $basedir;на такую:
my $exe = "$basedir/bin/TrayApache.exe";Эту информацию предоставил mac2000 тут на форуме, за что огромное спасибо.
После этого можно запускать Debver и оттестировать, как все работает. Эксцессов быть не должно (но как всегда может что-то случиться). Если все работает, можно отправить этих два файла в репозиторий.
На этом первая половина статьи закончилась. Вторая будет намного проще - а именно, как интегрировать svn в Eclipse GDT. К счастью, на рабочей версии проекта удаление тортилки и создания тучи новых репозиториев никак не сказалось. Хух! Отсюда один хороший вывод. Бекап папки репозитория можно поднять в любом другом месте. Это хорошо! Поехали дальше!
Только для начала скажу зачем мне плагин для Eclipse. TortoiseSVN хорошая программа и очень удобна для разборок с ревизиями, когда никто больше помочь не может, но есть одно но. В составе TortoiseSVN есть утилита, которая показывает различия между измененным файлом и тем, что находится в репозитории, и она, мягко говоря? не очень удобна. Вот пример ее работы.
А вот то же, только с помощью плагина Subclipse.
Согласитесь нагляднее. Решать конфликты проще в Subclipse, а то, что она интегрирована в IDE умножает ее баллы. Если что, в любой момент можно воспользоваться TortoiseSVN, и такое время от времени случается - одна голова хорошо, а две - лучше.
Итак, настраиваем Subclipse для Eclipse GDT.
Открываем наш Eclipse GDT (тараньку смываем глотком пива, закусываем очередным куском тараньки, боковым ухом слышим на дискавери канале, что "...теплый материнский сосок всегда доступен...") и там идем в пункт меню "Help"->"Install new software..."
В предлагаемом нам диалоге кликаем добавить
и указываем в качестве имени что-нибудь, а урл прописываем тот, который соответствует установленной версии SVN (помните, я говорил, что стоит ее запомнить?). Дело в том, что плагин для Eclipse PDT разрабатывается под соответствующую версию SVN движка. У меня версия Subversion - 1.6.9. Посмотреть какая версия плагина Subclipse соответствует нашей движка Subversion (на момент написания статьи) можно на сайте http://subclipse.tigris.org/ в разделе "Download and Install".
Моей ошибкой было игнорирования этой информации, и когда плагин был установлен и была сделана попытка синхронизироваться с проектом, то я получил ошибку времени выполнения и как результат испорченный проект, эклипс (хорошо, что репозиторий остался цел). Пришлось все начинать с начала.
Итак информация на сайте гласит:
Subclipse 1.4.x includes and requires Subversion 1.5.x client features and working copy format.А значит нам надо в диалоге указать именно "http://subclipse.tigris.org/update_1.6.x". Указываем, жмем ОК и ждем получения информации об этом плагине. Выбираем там все что нам предлагается и жмем Next.
Subclipse 1.6.x includes and requires Subversion 1.6.x client features and working copy format.
Links for 1.6.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.6.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.6.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
Links for 1.4.x Release:
Changelog: http://subclipse.tigris.org/subclipse_1.4.x/changes.html
Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x
Zipped downloads: http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
Снова Next
Да, согласны! Finish.
Ждем завершения установки.Если в ходе установки будет спрашивать, говорим да!
В конце соглашаемся перезагрузить IDE Eclipse.
А после перезагрузке в "PHP Explorer" вызываем контекстное меню проекта->"Team"->"Share project..."
В диалоге ничего не меняем и жмем Finish.
После мы увидим некоторые изменения в в "PHP Explorer"
а именно информацию о ревизии, даты последнего изменения и имени пользователя, который сделал последнее изменение. Так же появится иконка, которая говорит о состоянии файла - новый, удаленный, измененный, не изменненный... А так, же у нас появится в меню "Team" контекстного меню проекта (или папки/файлы) много действий, которые так же предоставляет TortoiseSVN в Windows Explorer.
Ну вот и все!
На статью было затрачено 4 часа, 1 перезагрузка, 1 бокал пива, пол леща, ну и конечно же часы ночных расследований когда было только желание сделать так, как это было когда-то когда работал на Java. Совет, если ты ведешь блог и хочешь писать подобные мануалы, пиши статью сразу - иначе потом придется себя сильно заставлять и переустанавливать все с самого начала.
Надеюсь, статья сэкономит больше времени, чем было затрачено на нее, и PageRank мне в помощь.
Спасибо Жека за ПХП проект и комментарий "я люблю мануалы со скриншотами, где каждый шаг разжеван" - я тоже люблю, спасибо Интернет и Google за информацию, спасибо Ксюха за ням-ням и понимание.
Спасибо, классный туториал! Я тоже хотел написать нечто подобное про локальный SVN :) но ввиду интересности инфы у тебя - не буду.
ОтветитьУдалитьПо поводу so файлов - предположу что их не импортируют по умолчанию потому что системы контроля версий обычно приучены игнорировать "исполняемые файлы" - exe, so, ... Наверняка это где-то настраивается.
Рад что понравилось. Интересно почему они приучены что либо игнорировать? - это не ожидается конечным пользователем.
ОтветитьУдалитьПриучены игнорировать наверное потому, что считают по умолчанию что эти исполняемые файлы - избыточная информация, которую можно воссоздать из исходников.
ОтветитьУдалитьНапример если ддя java есть папки src - с java-файлами и bin - с .class-файлами, наверное по умолчанию class-файлы будут проигнорированы, так как их компилятор сам создаст.
Думаю ты прав. А инфы в сети по ним я так и не нашел... И теперь еще больше не доверяю - доверяй но перепроверяй...
ОтветитьУдалить.so файлы по умолчанию запрещены у TortoiseSVN
ОтветитьУдалитьПравой кнопкой на репозитарии TortoiseSVN/Setting/General/Global ignore pattern
Ага, читайте мануалы, называется.
ОтветитьУдалитьА зачем весь каталог денвера бекапить?
ОтветитьУдалитьПроще только папку home.
собственно только там проекты над которыми вы работаете..
и там нет .so
Люблю следить за изменениями.
ОтветитьУдалитьКроме того работал за тремя разными компами и проще было таскать с собой одну базу SVN и делать либо полный чекаут, либо апдейт всего проекта вместе с денвером.