Subversion (софтуер): Разлика между версии

Изтрито е съдържание Добавено е съдържание
нови редове
нови редове
Ред 14:
 
'''Subversion''' e софтуерна [[система за контрол на версиите]]. Проекта е разработен на база на концепцията [[Отворен код|oтворен код]] ([[Open source|open-source]]). Системата използва централизирано хранилище за съхранените на файлови структури. Тя следи всички промени направени върху директориите и файловете, поставени под неин контрол, като запазва всички стари копия със съответната дата и час, при постъпване на нови версии в хранилището. Това позволява на потребителя при нужда да се върне към по-стара версия на проекта или да разгледа в детайли историята на промените. Такава организация на съхранение на файловете улеснява съвместната едновременна работа на много хора над даден проект, работещи от различни места и във различни времеви зони. Като цяло тази система може да бъде използвана за всякакви колекции от файлове – от source код до домакински списъци за пазаруване.
 
<br />
Subversion е широко използвана система в [[Open source|open-source]] обществото на и се използва от редица известни проекти, включително Apache Software Foundation, KDE, Free Pascal, FreeBSD, GCC, Python, Django, Ruby, Mono, SourceForge.net, ExtJS and Tigris.org.
 
Ред 20:
== История на Subversion ==
През 2000 година, новосъздадената американска компания [http://en.wikipedia.org/wiki/CollabNet CollabNet, Inc]. започва да търси програмисти, които да напишат и развият заместител на [[CVS]] (“Concurrent Versions System” - първата система за контрол на версиите. Тя е [[Отворен код|open-source]] и поддържа мрежова връзка, което позволява на много програмисти от цял свят да работят заедно). Като първа такава система, [[CVS]] не е изпипана идеално и има много недостатъци, отстраняването на които става основна цел на програмистите, които се захващат да пишат новата система за контрол на версиите. От [http://en.wikipedia.org/wiki/CollabNet CollabNet] решават да започнат от нулата с новата система, като запазят основните идеи на [[CVS]], но премахнат бъговете и грешките, които тя дава.
 
През февруари 2000 г. от [http://en.wikipedia.org/wiki/CollabNet CollabNet] се свързват с Карл Фогел, авторът на книгата ''Open Source Development with [[CVS]] (Coriolis, 1999)'' и му предлагат да се включи в работата по проекта за новата система за контрол на версиите. По стечение на обстоятелствата, точно по същото време Карл, съвместно с неговия приятел Джим Бланди, обмисля дизайн за нова такава система.<br /> През 1995г, двамата с Джим Бланди създават фирмата ''Cyclic Software'', която предлага договори за поддръжка на [[CVS]]. Въпреки че скоро след това продават компанията си, те продължават да използват [[CVS]] ежедневно в работата си и така се сблъскват с недостатъците на първата система за контрол на версиите, което ги довежда до мисълта, че трябва да бъде измислен по-добър начин за обработка и управление на версиализираната информация. Още преди да получи поканата от [http://en.wikipedia.org/wiki/CollabNet CollabNet] за работа по проекта, Карл Фогел вече е наясно с основния дизайн и името на новата система за контрол на версиите - Subversion. След като получава поканата за работа, той веднага приема, а неговият приятел, Джим Бланди, успява да придума работодателя си, Red Hat Software, да го „дари” за неопределен период от време на [http://en.wikipedia.org/wiki/CollabNet CollabNet], за да може да участва и той в работата по проекта.
 
<br />
През май същата година започва задълбочената работа по дизайна на новата система, в която се включват и Браян Белендорф и Джейсън Робинс от [http://en.wikipedia.org/wiki/CollabNet CollabNet], както и Грег Щайн, който по това време е независим разработчик на [[Софтуер|софтуер]]. Subversion бързо привлича интереса на голяма част от активните разработчици на [[Софтуер|софтуер]]. Става ясно, че много хора не са били доволни от работата на [[CVS]] и приветстват идеята най-сетне да бъде направено нещо по въпроса с подобрението й.
 
Като цяло работния екип на Subversion не се опитва да намери нови концепции за методологията на [[Система за контрол на версиите|системите за контрол на версиите]], а да поправи неизправностите на CVS.
 
<br />
След 14 месеца на „кодене”, на 31.август 2001 г., Subversion получава собствен [[хостинг]]. Това е датата, на която разработчиците на Subversion спират да използват [[CVS]] за управлението на [[Изходен код|source кода]] на Subversion и започват да използват самата си новоразработена [[система за контрол на версиите]].
 
<br />
През 2009 г. [http://en.wikipedia.org/wiki/CollabNet CollabNet], съвместно с разработчиците на Subversion успяват да интегрират проекта си в ''Apache Software Foundation (ASF)'' – един от най-известните колективи на [[Отворен код|open-source]] - проекти в света.
 
<br />
В началото на 2010 г. системата Subversion е напълно приета в семейството на топ-проектите на ASF, премества „уеб – присъствието” си на http://subversion.apache.org и бива преименувана на ''“Apache Subversion”''.
 
== Начин на работа ==
Това, което прави една такава система полезна и ценна за разработчиците на софтуер е това, че предоставя възможност за подробно разглеждане на направените промени, които са довели до създаването на нова версия, за сравняване на версиите една с друга и за връщане на по-стара версия като актуална.
 
<br />
В основата на всяка една система за контрол на версиите, както е и при Subversion, стои хранилището на информация (''[http://en.wikipedia.org/wiki/Software_repository repository]''). При постъпване на нова версия на файл в хранилището, старата версия се съхранява с дата и час или с други думи съхранява всички версии на даден файл подредени хронологически. Едно типично Subversion-хранилище съдържа файлове на повече от един проект, като всеки проект е поддиректория във файловата система на хранилището. Системата съхранява също и автора на всяка версия - по тази причина при свързване с хранилището всеки потребител се идентифицира с име и парола. Идентификацията на потребителите определя също и дали този потребител има права да редактира файла (т.е. да запазва нови версии в хранилището) или само да чете данни. Тъй като, всички повечето софтуерни продукти могат да работят само с по една версия на даден файл, а не с всички наведнъж, при потребителя получава ''работно копие (working copy)'' на нужните му файлове, което съдържа изисканата от него версия от хранилището (в типичния случай - най-актуалната) и работи с него.
 
<br />
Системите за контрол на версиите могат да работят по един от следните модели – ''„заключи - промени - отключи”'' (“lock – modify – unlock”) и ''„копирай – промени - слей”'' (“copy – modify – merge”). Subversion работи по втория, но нека разгледаме и двата:
<br />
<br />
»»» Моделът ''„Заключи – промени – отключи”'' – този модел предотвратява успешно сценарии, при които двама потребители работят едновременно върху работно копие на проекта и в крайна сметка единият публикува промените си преди другия и след публикуването и на промените на втория, тези на първия биват загубени. Въпреки това този модел не е сигурен. Той позволява само на един потребител да работи върху проекта в дадения ден и час. След получаването на работното копие, потребителят заключва файла и едва тогава има възможност да го променя. След приключване на работата с дадения файл, потребителят отключва файла и той става достъпен за обработка и от останалите. Проблемите с този модел са следните:
¹# след заключване на файл, потребителят може да забрави да го отключи и това да доведе до невъзможност за работа на другите потребители
<br />
²# заключването може да доведе до излишна сериализация на файла – един потребител променя началото, а друг – края. Промените не се застъпват и те спокойно могат да ги правят и едновременно, след което да слеят двата проекта. Няма нужда да се правят нови версии в случая.
¹ след заключване на файл, потребителят може да забрави да го отключи и това да доведе до невъзможност за работа на другите потребители
³# Заключването води до фалшиво чувство за сигурност – моделът позволява на различни потребители да работят върху различни файлове едновременно, но в случай, че двата файла зависят един от друг, моделът не дава гаранция, че информацията няма да се промени фатално. <br />
<br />
 
² заключването може да доведе до излишна сериализация на файла – един потребител променя началото, а друг – края. Промените не се застъпват и те спокойно могат да ги правят и едновременно, след което да слеят двата проекта. Няма нужда да се правят нови версии в случая.
»»» Моделът ''„Копирай – промени - слей”'': Този модел работи по следния начин: всеки потребител се свързва с хранилището на проекта и получава свое собствено работно копие. Всеки работи самостоятелно върху копието си. Накрая отделните копия се сливат в една финална версия. Системата за контрол на версиите подпомага сливането, но при големи застъпвания в информацията е необходима и човешка намеса преди финализирането на новата версия на проекта.<br />
<br />
 
³ Заключването води до фалшиво чувство за сигурност – моделът позволява на различни потребители да работят върху различни файлове едновременно, но в случай, че двата файла зависят един от друг, моделът не дава гаранция, че информацията няма да се промени фатално. <br />
<br />
»»» Моделът ''„Копирай – промени - слей”'': Този модел работи по следния начин: всеки потребител се свързва с хранилището на проекта и получава свое собствено работно копие. Всеки работи самостоятелно върху копието си. Накрая отделните копия се сливат в една финална версия. Системата за контрол на версиите подпомага сливането, но при големи застъпвания в информацията е необходима и човешка намеса преди финализирането на новата версия на проекта.<br />
<br />
При всяко обновяване на хранилището в Subversion, или всички промени биват приети, или никои от тях. В случай на приемане следва създаване на ново състояние на файловата система на хранилището, наречено „ревизия”. Всяка ревизия има уникален номер, по-голям с единица от този на предходната. При създаването на хранилището на даден проект ревизията е с номер 0 и се състои от празна директория.
<br /><br />
 
=== Команди за работа в Subversion ===