Subversion (софтуер)

Вижте пояснителната страница за други значения на Subversion.

Subversion (софтуер)
Информация
РазработчикApache Software Foundation
Последна версия1.8.1
Програмен езикC
Операционна системаЛинукс, Юникс и Уиндоус
ПлатформаМеждуплатформен
Вид софтуерУправление на версии
ЛицензApache лиценз
Уебсайтsubversion.apache.org
Subversion в Общомедия

Subversion e свободна софтуерна система за контрол на версиите. Проектът е разработен на база на концепцията отворен код. Системата използва централизирано хранилище за съхранените на файлови структури. Тя следи всички промени в директориите и файловете, поставени под неин контрол, като запазва всички стари копия със съответната дата и час, при постъпване на нови версии в хранилището. Това позволява на потребителя при нужда да се върне към по-стара версия на проекта или да разгледа в детайли историята на промените. Такава организация на съхранение на файловете улеснява съвместната едновременна работа на много хора над даден проект, работещи от различни места и в различни времеви зони. Тази система може да бъде използвана за всякакви колекции от файлове – от изходен код до домакински списъци за пазаруване.

Subversion е широко използвана система в общността на отворения код и се използва от редица известни проекти, включително Apache Software Foundation, KDE, Free Pascal, FreeBSD, GCC, Python, Django, Ruby, Mono, SourceForge.net, ExtJS and Tigris.org.

През 2000 г. новосъздадената американска компания CollabNet, Inc. започва да търси програмисти, които да напишат и развият заместител на CVS („Concurrent Versions System“ – първата система за контрол на версиите. Тя е с отворен код и поддържа мрежова връзка, което позволява на много програмисти от цял свят да работят заедно). Като първа такава система, CVS не е идеално изпипана и има много недостатъци, чието отстраняване става основна цел на програмистите. От CollabNet решават да започнат от нулата с нова система, като запазят основните идеи на CVS, но премахнат бъговете и грешките, които тя дава.

През февруари 2000 г. от CollabNet се свързват с Карл Фогел, автор на книгата Open Source Development with CVS (Coriolis, 1999) и му предлагат да се включи в работата по проекта за нова система за контрол на версиите. По стечение на обстоятелствата, точно по същото време Карл, съвместно с неговия приятел Джим Бланди, обмисля дизайн за нова такава система.
През 1995 г., двамата с Джим Бланди създават фирмата Cyclic Software, която предлага договори за поддръжка на CVS. Въпреки че скоро след това я продават, те продължават да използват CVS ежедневно в работата си и така се сблъскват с недостатъците ѝ, което ги навежда на мисълта, че е необходим по-добър начин за обработка и управление на информацията за версиите. Още преди да получи поканата от CollabNet за работа по проекта, Карл Фогел вече е наясно с основния дизайн и името на новата система – Subversion. Той веднага приема поканата за работа, а неговият приятел Джим Бланди успява да придума работодателя си, Red Hat Software, да го „дари“ за неопределен период от време на CollabNet, за да може да участва и той в работата по проекта.

През май същата година започва задълбочената работа по дизайна на новата система, в която се включват и Браян Белендорф и Джейсън Робинс от CollabNet, както и Грег Щайн, който по това време е независим разработчик на програмни осигурявания. Subversion бързо привлича интереса на голяма част от активните разработчици на софтуер. Става ясно, че много хора не са били доволни от работата на CVS и приветстват идеята най-сетне тя да бъде подобрена.

Като цяло работният екип на Subversion не се опитва да намери нови концепции за методологията на системите за контрол на версиите, а да поправи неизправностите на CVS.

След 14 месеца на разработка на 31.август 2001 г., Subversion получава собствен хостинг. Това е датата, на която разработчиците на Subversion спират да използват CVS за управлението на изходния код на Subversion и започват да използват новоразработената система.

През 2009 г. CollabNet съвместно с разработчиците на Subversion успяват да интегрират проекта си в Фондация за софтуер Apache (ASF) – един от най-известните колективи за свободни проекти в света.

В началото на 2010 г. системата Subversion е напълно приета в семейството на топ-проектите на ASF, премества „уеб – присъствието“ си на www.subversion.apache.org и бива преименувана на „Apache Subversion“.

Това, което прави една такава система полезна и ценна за разработчиците на софтуер е това, че предоставя възможност за подробно разглеждане на направените промени, които са довели до създаването на нова версия, за сравняване на версиите една с друга и за връщане на по-стара версия като актуална.

В основата на всяка една система за контрол на версиите, както е и при Subversion, стои хранилището на информация (repository). При постъпване на нова версия на файл в хранилището, старата му версия се съхранява с дата и час или с други думи, съхраняват се всички версии на даден файл в хронологичен ред. Едно типично Subversion-хранилище съдържа файлове на повече от един проект, като всеки проект е поддиректория във файловата система на хранилището. Системата съхранява също и автора на всяка версия – по тази причина при свързване с хранилището всеки потребител се идентифицира с име и парола. Потребителите имат различни права – или да редактират файла (т.е. да запазват нови версии в хранилището) или само да четат данни. Тъй като повечето софтуерни продукти могат да работят само с по една версия на даден файл, а не с всички наведнъж, потребителят получава работно копие (working copy) на нужните му файлове, което съдържа изисканата от него версия от хранилището (в типичния случай – най-актуалната) и работи с него.

Системите за контрол на версиите могат да работят по един от следните модели – „заключи – промени – отключи“ („lock – modify – unlock“) и „копирай – промени – слей“ („copy – modify – merge“). Subversion работи по втория, но нека разгледаме и двата:

  • Моделът „Заключи – промени – отключи“ – този модел предотвратява успешно сценарии, при които двама потребители работят едновременно върху работно копие на проекта и в крайна сметка единият публикува промените си преди другия и след публикуването и на промените на втория, тези на първия биват загубени. Въпреки това този модел не е сигурен. Той позволява само на един потребител да работи върху проекта в дадения ден и час. След получаването на работното копие, потребителят заключва файла и едва тогава има възможност да го променя. След приключване на работата с дадения файл, потребителят отключва файла и той става достъпен за обработка и от останалите. Проблемите с този модел са следните:
  1. след заключване на файл, потребителят може да забрави да го отключи и това да доведе до невъзможност за работа на другите потребители
  2. заключването може да доведе до излишна сериализация на файла – един потребител променя началото, а друг – края. Промените не се застъпват и те спокойно могат да ги правят и едновременно, след което да слеят двата проекта. Няма нужда да се правят нови версии в случая.
  3. Заключването води до фалшиво чувство за сигурност – моделът позволява на различни потребители да работят върху различни файлове едновременно, но в случай, че двата файла зависят един от друг, моделът не дава гаранция, че информацията няма да се промени фатално.
  • Моделът „Копирай – промени – слей“: Този модел работи по следния начин: всеки потребител се свързва с хранилището на проекта и получава свое собствено работно копие. Всеки работи самостоятелно върху копието си. Накрая отделните копия се сливат в една финална версия. Системата за контрол на версиите подпомага сливането, но при големи застъпвания в информацията е необходима и човешка намеса преди финализирането на новата версия на проекта.

При всяко обновяване на хранилището в Subversion, или всички промени биват приети, или никои от тях. В случай на приемане следва създаване на ново състояние на файловата система на хранилището, наречено „ревизия“. Всяка ревизия има уникален номер, по-голям с единица от този на предходната. При създаването на хранилището на даден проект ревизията е с номер 0 и се състои от празна директория.

Команди за работа в Subversion

[редактиране | редактиране на кода]

svn checkout – получаване на работно копие за някое от поддърветата на хранилището. Пример:

$ svn checkout http://svn.example.com/repos/nature
A nature/Makefile
A nature/plants.c
A nature/animals.c
Checked out revision 56.
$ ls -A calc
Makefile plants.c animals.c .svn/
$

Буквата А в началото на реда означава, че Subversion добавя определен брой елементи в работното копие. Допълнението „ – .svn –„ е файл, който пази системната информация на Subversion по поддръжката на работното копие – точно време на създаването му и състоянието на последната ревизия преди създаването на работното копие. Точно този файл .svn отчита дали са направени промени в оригиналния файл.

  • svn commit – изпращане на промените към хранилището. След тази команда, всички нови работни копия съдържат направените промени. Може да бъде добавено и съобщение за направените промени при изпращането им с текущата команда. Например: svn commit plants.c -m "Fixed names in plants.c."
  • Ако междувременно още някой работи върху работно копие на същия файл, който първият потребител е променил, той остава с неактуално копие. За целта се използва другата команда svn update, която актуализира работното копие на втория потребител, като му добавя промените, запаметени от първия след края на работата му. Не е необходимо уточняване на това, кой точно файл трябва да бъде актуализиран. Subversion го намира сам, използвайки информацията от .svn файла.
  • svn help <subcommand> – описва употребата на командата, написана на мястото на <subcommand>, като включва нейните синтаксис, опции и поведение. Пример: $ svn help update .

Има два начина за добавяне на нови файлове в хранилището на Subversion и това е чрез командите svn import и svn add.

  • svn import < path/to/the/tree > – служи за добавяне в хранилището на цяло дърво от файлове, като автоматично се създават необходимия брой директории за файловете от дървото.
  • svn add – добавя нови файлове към хранилището.
  • svn delete – изтриване на файлове от хранилището.
  • svn copy <file1><file2> – създава се нов файл („file2“) като дубликат на първия файл. Вторият файл се насрочва да бъде добавен към хранилището. След следващия commit историята на промените на първия файл също се добавя към копието – „file2“.

След направени промени върху работното копие, винаги е добре те да бъдат прегледани преди commit-ването им. Команди:

  • svn status – преглед на промените.
  • svn diff – подробно описание на промените – вникване в детайлите им.

Други команди:

  • svn revert – връща по-стара версия на файла или директорията като текуща (актуална).
  • svn resolve – отстраняване на конфликтите при merge-ване на файлове.
TortoiseSVN – подменю

TortoiseSVN – свободен Уиндоус инструмент за Apache Subversion с лиценз от GNU General Public License (GPL). Управлява файлове и директории в реално време. TortoiseSVN се интегрира безпроблемно в Windows-обвивката (като например Windows Explorer). Това позволява на потребителя да продължи да работи с инструментите, с които е свикнал, без да му се налага да отваря приложението всеки път при необходимост от използване функциите за контрол на версиите, предоставени от Subversion.

Контекстното меню на TortoiseSVN е съвместимо с различни файлови мениджъри, което не задължава потребителя да използва Windows Explorer-a, може да го достъпва и чрез File/Open-диалоговия прозорец.

Състоянието на всеки файл с подверсии в себе си се индицира от малка иконка върху тази на файла. По този начин потребителят вижда в какво състояние е работното му копие.

Всички команди от Subversion са достъпни от контекстовото меню, където TortoiseSVN добавя и свое подменю.

SmartSVN – инструмент за Apache Subversion с платен лиценз. Написан е на Java и е съвместим с три различни операционни системи – Уиндоус, Линукс и MacOS. От 2005 г. до 2012 г. SmartSVN бива разработван от немската компания Syntevo Gmbh, която след това го продава на WANdisco International Ltd. Потребителският интерфейс на SmartSVN е подобен на този на нормалните файлови мениджъри (като например Windows Explorer) – всички директории и папки в дървовиден вид в лявата част на екрана и таблица с файловете в дясната част. Таблицата с файлове е устроена така, че последно променените файлове се намират най-отгоре, за да се улеснява потребителя при commit-ването им към сървъра на SVN. SmartSVN има и някои допълнителни функции като например режим на „показване на разликите“ (сравнява два текстови файла и подчертава различията), режим „решаване на проблеми“ (сравнява три документа и помага с merge-ването им), както и вграден SSH – клиент.

Някои програмисти предпочитат инструментите на Subversion, които използват, да са вградени в работната им среда. Такива инструменти предлагат постоянна информация за състоянието на файловете и техните версии. Те също така добавят и командите на хранилището към основното меню на средата за разработване на софтуер. Примери за такива инструменти са Agent SVN, AnkhSVN, Unified SCC и VisualSVN за използване съвместно с Microsoft Visual Studio и Subclipse (или Subversive) за работа с Eclipse. Изброените инструменти позволяват файловете да бъдат добавяне, премахвани, ъпдейт-вани и т.н. без потребителя да напуска средата за разработване на софтуер (IDE), която използва. Различията във файловете, състоянието им и тяхната история на промените също са видими през средата.

blsvn е инструмент на Subversion, който осигурява механизми за съкратено изписване на извикванията на пътищата в хранилището. Пример за създаване на нов таг чрез blsvn например е blsvn copy ~../trunk ~../tags/NewTag. blsvn разширява сам аргументите си и така ги изпраща на Subversion. С инсталирането на този инструмент, потребителят не се задължава да използва само съкратени записи на пътищата. На тях се гледа като на опция.

KDESVN – инструмент на Subversion, който поддържа режим на преглед на кода с описание на разликите между две версии във всеки ред и с бележка кой е направил промените. Този инструмент предлага и 3D графична визуализация на кодът дървото. Разработен е на С++ и използва библиотеките на KDE.

RabbitVCS – инструмент на Subversion, пригоден за работа през Linux. Той добавя функциите на системата за контрол на версиите към файловите мениджъри Nautilus и Thunar и предлага plugin-и за редактора Gedit. RabbitVCS може да се използва и за работа с Git.

WebSVN – инструмент, който предлага онлайн преглеждане на хранилището, историята на промените, коментарите при качване на нова версия на даден файл или директория, както и отваряне на кода в режим на цветно синтактично преглеждане. В последния режим кодът не може да бъде променян. WebSVN е разработен на PHP и се отваря през browser.

Таблица на основните инструменти на Subversion

[редактиране | редактиране на кода]
Име Език, на който е разработен Операционна система Лиценз Интегриране Език Мрежови протоколи Текуща версия Дата на последното обновяване
AgentSVN C, C++ Microsoft Windows платен, trial-версия всякакви MS-SCCI съвместими среди (IDE), например Microsoft Visual Studio, Microsoft SQL Server Management, PowerBuilder, Zeus и др. Английски http, https, svn, svn+ssh, file 1.95 7 февруари 2012 г.;
преди 12 години
 (2012-02-07)
AnkhSVN C# Microsoft Windows Apache License Microsoft Visual Studio (всички версии, освен Express) Английски http, https, svn, svn+ssh, file 2.5.12266 12 ноември 2013 г.;
преди 10 години
 (2013-11-12)
blsvn C++ Microsoft Windows MIT command-line wrapper Английски http, https, svn, svn+ssh, file 0.1 12 април 2010 г.;
преди 14 години
 (2010-04-12)
Cascade Linux, Mac OS X, Microsoft Windows платен, свободен за използване само в бизнес условия Windows – обвивката (Windows Explorer), драйвър за файлови системи Английски http, https, svn 1.2.0.1069 2008 г.;
преди 16 години
 (2008)
EasySVN C++ Microsoft Windows x86 и x86-64 GPL Windows shell, Linux command line, Mac OS X Finder integration. Необходимо е да бъде инсталиран и TortoiseSVN. Английски http, https, svn 0.4.0.456 beta 29 ноември 2011 г.;
преди 12 години
 (2011-11-29)
KDESVN C++, Qt Linux, Unix, Mac OS X GPL Konqueror, Dolphin, самостоятелно Английски file, http, https, (k)svn, (k)svn+file, (k)svn+http, (k)svn+https, (k)svn+ssh 1.6.0 5 август 2012 г.;
преди 12 години
 (2012-08-05)
MagnetSVN Microsoft Windows Windows XP / Vista / 7 64-bit платен Microsoft Office (2007 and 2010, Word and Excel) Английски file, http, https, svn and svn+ssh 0.7.2 beta (32-bit за XP/Vista/7) (64-bit за Vista/7) 18 ноември 2011 г.;
преди 12 години
 (2011-11-18)
RabbitVCS Python, GTK+ Linux GPL Nautilus, Thunar, Gedit, CLI (command-line interface) ca, cs, de, en, es, fa, fr, he, hr, it, ja, nb, nl, pl, pt, ro, ru, sk, sl, sv, zh_CN http, https, svn, svn+ssh, file 0.15.0.5 9 ноември 2011 г.;
преди 12 години
 (2011-11-09)
sdSVN Java Linux, Unix, Mac OS X, Microsoft Windows GPL GUI, самостоятелно, Java Web Start Английски http, https 1.0-SNAPSHOT-r63 (minimal and full) 29 май 2011 г.;
преди 13 години
 (2011-05-29)
SmartGit Java Linux, Unix, Mac OS X, Microsoft Windows (Any with a 1.5 or higher JRE) свободен, за некомерсиална цел GUI, standalone Английски http, https, svn, svn+ssh 2.1.6 3 декември 2011 г.;
преди 12 години
 (2011-12-03)
SmartSVN Java Linux, Unix, Mac OS X, Microsoft Windows (Any with a 1.5 or higher JRE) trial-версия с платено надграждане на функциите и свободен 'Foundation' edition GUI, самостоятелен, Finder and Windows Shell (Explorer) вграждане Английски http, https, svn, svn+ssh 7.5 15 ноември 2012 г.;
преди 11 години
 (2012-11-15)
Subclipse Java Linux, Mac OS X, Microsoft Windows Eclipse Public License(EPL) Eclipse http, https, svn, svn+ssh, file 1.8.4 5 декември 2011 г.;
преди 12 години
 (2011-12-05)
TortoiseSVN C++, MFC Microsoft Windows (32/64-bit) GPL Windows Shell (Explorer) 36 езика (включително и английски) http, https, svn, svn+ssh, file, svn+XXX 1.8.3 29 октомври 2013 г.;
преди 11 години
 (2013-10-29)
WebSVN PHP Linux, Unix, Mac OS X, Microsoft Windows GPL web-базиран повече от 25 езика 2.3.3 27 юни 2011 г.;
преди 13 години
 (2011-06-27)
VisualSVN Microsoft Windows (32/64-bit) платен Microsoft Visual Studio (всички версии освен Express) Английски http, https, svn, svn+ssh, file 4.0.1 30 октомври 2013 г.;
преди 11 години
 (2013-10-30)

Ограничения и проблеми при SVN

[редактиране | редактиране на кода]

Един от доста известните проблеми при Subversion е свързан с командата за преименуване на файл и папка. От 2013 година Subversion направиха преименуването на файл или папка да става, чрез „копиране“ на новото име, последвано от „изтриване“ на старото име. Проблемът идва от това, че промяната остава само в името, докато всички връзки на файлове и папки остават както преди. Оттук идват и проблемите при преместване на файлове между папките. Във версия 1.5 на Subversion някои от тях бяха отстранени, но във версия 1.8 тези проблеми бяха отстранени вече окончателно.

И до този момент (2013 година) Subversion има сериозен недостиг на качествени инструменти за администрация на съдържанието. Например някой може да иска да изтрие перманентно всички исторически записи на определени файлове. Това не е възможно да се осъществи с вградените средства на Subversion.

Subversion записва доста допълнителни копия от файловете на локалната машина на потребителя. Това може да се окаже сериозен проблем когато се работи по големи проекти или файлове, или когато разработчиците работят по няколко проекта едновременно. Във версиите преди 1.7 директориите .svn на клиентската страна може да се повредят.

Subversion не записва датата, на която даден файл е бил модифициран. Файловете които се подават към хранилището съдържат единствено датата на чекване, но не и датата на която е направена модификацията. Това доста често не е желаната информация. Това нещо се осъществява от допълнителни програми (Third Party).