13 декабря 2010

glVehicle + svn

Всем привет! В этом сообщении решил описать полный процесс установки glVehicle на Ваш компьютер ;) Чтобы не думать о том, какие демки есть, что там нового и т.д. Думаю, это будет полезно всем, кто вообще хочет познакомиться с системой контроля версий svn. А также рекомендую к прочтению тем, кто постоянно трудится, вычищая папку с проектом от всяких назойливых dcu/~pas/~dfm и других файлов. В общем, постараюсь осветить маленькие хитрости, которые, возможно, помогут Вам в работе. Надеюсь, это сообщение устранит последний барьер между исходными кодами glVehicle и монитором читателя. Вот так вот я поэтично закрутил вступление, поэтому сразу же направимся к кульминации, чтобы никого не утомить!

Что такое svn (SubVersioN)?
Итак, если сказать по-простому, то в принципе системы контроля версий предназначены для того, чтобы устранить фразы вроде: "сила креста! я же случайно стер важную процедуру и совсем ненароком сохранил файл! как же быть?". Как раз во избежание таких плачевных ситуаций, можно организовать репозиторий (или воспользоваться уже запущенными хранилищами), в который периодически будем заливать (commit/коммитеть) исходные коды программы. Что замечательно, так это то, что все версии программы (revision/ревизии) будут сохраняться в репозитории, и мы в любой момент сможем посмотреть изменения, которые мы вносили в программу, можно сравнить построчно прежнюю и текущую версию нашего кода. Сейчас немного сленга, чтобы понимать о чем люди пишут иногда. Итак, само хранилище называют репозиторием (repository, иногда сокращают до "репо"). Процесс заливания на сервер наших изменений - коммитом (commit), версию программы на сервере - ревизией (иногда коммитов бывает до сотен тысяч на проект, поэтому ориентируются строго по номеру ревизии - это уникальное число коммита в репозитории). Подробнее об svn можно почитать на просторах Интернета. Есть и другие системы контроля версий, вроде CVS и Mercurial. Первый (CVS) - уже устарел и уходит в прошлое, второй (Mercurial) - набирает обороты и скоро может вытеснить svn; но я с ним, к сожалению, пока не работал.

Какую программу лучше использовать?
Для работы с svn программ много. У меня сейчас установлены две: одна как консольный клиент, удобный для различных tools'ов; вторая - для быстрой и легкой работы через explorer. Рекомендую начать именно со второго клиента, а именно TortoiseSVN. Бесплатен, удобен, прост, вроде даже с открытыми исходниками. В общем, качаете свежую версию, устанавливаете и наблюдаете тот факт, что теперь в explorer'е доступно дополнительное меню:


Как выгрузить исходные коды glVehicles?
Все очень просто, покажу на картинках :)

Для начала нужно найти адрес, по которому располагается репозиторий, для этого заходим в раздел Source\CheckOut на сервере Code.Google проекта glVehicles:
и находим там необходимый адрес:

Копируем его в буфер обмена (Ctrl+C), пригодится.
Далее выбираете папку на локальном компьютере, в которую хотите загрузить исходники:

Теперь жмем в explorer'е правую кнопку мыши на нашей папке и находим пункт контекстного меню "Svn Checkout...":

Клацаем, в появившемся окошке вставляем (Ctrl+V) тот адрес репозитория, что мы сохранили в буфер обмена:
Нажимаем Ok, и, если соединение с Интернетом есть, а также репозиторий еще жив, то появится окошко, в котором будет виден прогресс загрузки исходников:
Вот и всё! Зайдите в папку - там будут лежать долгожданные (а может и не очень) pas-файлы:
Но есть еще один момент. Давайте откроем какой-нибудь проект из папки prj в Delphi. Зайдем в свойства проекта (Ctrl+Shift+F11) и увидим следующее:
Зачем такие сложности?
Настроив таким образом пути проекта можно добиться того, что dcu файлы будут складироваться в отдельную папку, не захламляя папки с исходниками. Также exe-файл будет сохранен в свою папку, куда можно смело сбрасывать все ресурсы для итогового проекта: картинки, dll, модели и т.д. Тем самым папки prj и src будут оставаться чистыми, имея внутри себя только файлы, относящиеся к компиляции (pas, dfm, dpr, и другие).

Как теперь все это компилировать?
Все очень просто. Для начала добавим необходимые для успешной компиляции папки dcu и exe.
Теперь, чтобы при различных манипуляциях с репозиторием, никто не ругался, что есть какие-то странные папки, не относящиеся к данному хранилищу, пометим их в качестве игнорируемых:
Такую операцию выполните для обеих папок (dcu и exe). Теперь svn клиент будет пропускать эти папки при различных операциях.

Перед запуском проектов осталось последнее - заполнение exe-директории необходимыми для корректной работы файлами. А именно:

1. dll для работы физики. 
Скопируйте b2Physics.dll из prj\dll\b2Physics.dll в папку exe\. После этого порт b2Physics.pas будет корректно работать с функциями Box2d.

2. Различные картинки, которые будут использоваться в качестве текстур объектов.
Все они хранятся в папке images\. В отличие от dll-файла из первого пункта, который меняется довольно редко и его не трудно раз в двадцать ревизий скопировать из папки dll в папку exe; так вот в отличие от него, картинки в папке images меняются довольно часто, поэтому, чтобы не копировать содержимое этой папки из одного места в другое при каждом обновлении репозитория, можно сделать такой трюк (осторожно, при использовании этого трюка, картинки будут выгружены дважды, при этом интернет трафик удвоится). 
Итак, делаем так: в папке exe создаем папку images:
А затем ассоциирую ее (exe\images) с папкой images из репозитория, которая лежит на один уровень выше.
Жмем Ok, и теперь, с одной стороны, внутри exe есть необходимая для работы папка images, с другой - она уже верным образом ассоциирована с хранилищем, что не может не радовать - ведь это может сэкономить нам кучу нервов, освобождая от постоянного копирования содержимого папки из одного места в другое!
Уф... всё!

Как обновлять исходные коды?
Теперь, для того, чтобы увидеть изменения, которые будут производиться в проекте, достаточно выполнить команду Update:
Опять появится окошко, опять побегут файлы, и сразу станет ясно, были произведены какие-то изменения или нет.
Если же вы использовали "трюк" с папкой images, тогда придется сделать еще Update и на ту папку тоже (помните, мы пометили папку exe как игнорируемую для svn-операций? так вот именно из-за этого, обновления, касаемые корневой папки glVehicles не коснутся папки exe\images и ее придется обновить вручную через меню Svn Update точно также, как и папку glVehicles на картинке выше)

Вроде ничего не забыл. Попробовал, работает!
Теперь, надеюсь, проблем с выгрузкой исходников, компиляцией и обновлением быть не должно! 
Всем удачи!

Сообщения, схожие по тематике: