Работа с клонове в SVN в блога Личен опит в разработката на софтуер
Работа с клонове в SVN
От основния клон на разработката можете да отделите клона, който е негово копие в даден момент от време. Това решава следните задачи:
- Коригиране на състоянието на разработка (например пускане на нова версия), към което можете да се върнете по всяко време.
- Развитието независимо от основния клон е важно, когато няколко разработчици работят върху един проект.
Тази публикация ще разгледа тези възможности, както и капаните при работа с клонове и как да ги избегнете.
Преди да прочетете, силно ви препоръчвам да прочетете въведението към Subversion и бележка относно организацията на хранилището. Трябва също така да се уверите, че версията на SVN, която използвате, е поне 1.5, тъй като по-ранните версии имат редица сериозни проблеми при работа с клонове.
Какво е клон?
Нека се съгласим, че основният клон (ствол на дърво) означава директорията в хранилището, където се извършва разработката (ствол ). След това, веднага след създаването на клона, той е точно копие на ствола, но независимо от своя родител, ствола на дървото. Можете независимо да работите както с клона, така и с ствола, да записвате кода в хранилището, докато историята на промените ще бъде различна както за ствола, така и за клона. Разклоненията в SVN са леки, така че можете да създавате колкото искате разклонения, без да се притеснявате твърде много за разрастването на хранилището.
Извършване на специфично състояние на развитие
Много е удобно да се ангажират определени състояния на разработка в клонове с идентификатори, съответстващи на външна софтуерна версия (напр. 2.4.1) или вътрешна такава (build_534). Тези идентификатори са удобни за използване в системи за проследяване на грешки, документация, вътрешна кореспонденция. В това можете да сте сигурни във всеки един моментвреме е възможно да получите желаното състояние на кода, например, за да проучите причините за проблем.
За тези цели служи папкатаtags в корена на хранилището. Тоест вътре в него може да има папки с имена1.0.0,1.0.1,2.0.0 и т.н., които от своя страна ще съдържат действителния код към момента на създаване на клона. Работата с тях е напълно подобна на работата сtrunk. Възможно е да правите промени, да ги ангажирате в хранилището, но силно не препоръчвам да правите това, тъй като концептуално това са само моментни снимки от основния клон, съответстващ на определен етап!
Използване на клонове за развитие на екип
Ако повече от един човек работи по проект, препоръчвам да използвате подхода за временно разклоняване. Какво искам да кажа с това? Например, получавам задача да внедря определена функционалност. Трябва периодично да записвам кода си в хранилището, но ако запазя кода в неработещо състояние (например временни експерименти или просто реших да отложа работата за утре), тогава това ще прекъсне основния клон за разработка и ще създаде проблеми за други разработчици. Затова, когато получа задача, правя копие на ствола във временен клон, работя в него спокойно, знаейки, че работата ми няма да повлияе на работата на други разработчици, и когато завърша работата, сливам промените в ствола и изтривам клона. Трябва да изтриете клона след работа, за да не увеличите ентропията в проекта.
За тази цел използвам директориятаbranches, така че тази директория може да съдържа временни разклонения като това:task_201,task_240 и така нататък.
Създайте клон
Създаването на клон е лесно, всичко, което трябва да направите, е да създадете копие на основния клон и да извършите промените. Напримернамирайки се в корена на хранилището, създайте временен клон:
Или създайте клон, съответстващ на издадената версия 2.4.6:
Изтриване на клон
Подобно на изтриването на папка:
Сливане на клонове
След приключване на работата е необходимо да се слеят промените във временния клон с багажника. Най-лесният начин да направите това е да отидете в директорията с основния клон за разработка (trunk ) и да изпълните командатаmerge :
След това разрешете конфликти (ако има такива) и извършете промените:
Преди да извършите обединяването, първо трябва да актуализирате кода с командатаupdate и второ е много желателно да видите какво се случва, когато обединявате, без реално да го правите:
внимание! Понякога, по някаква причина, която не разбирам, когато посочвате кратката форма на пътя на клона (../branches/branch_name ), сливането не работи, така че трябва да посочите пълния път:svn://server/repository_name/branches/branch_name
Обединяване на клонове в SVN
Ако даден файл е бил изтрит, преименуван или преместен в клон или ствол, ще възникне конфликт на дърво. Няма да е възможно автоматично да разрешите този конфликт, ще трябва ръчно да преместите файла (или обратното да не го премествате), ръчно да обедините двата файла и едва след това да кажете на системата, че конфликтът е разрешен:
И ангажирайте промените.
Още няколко препоръки
От предишния параграф можем да заключим, че конфликтът на клонове е изключително неприятно нещо и това е вярно. Ето защо две препоръки: