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

Изтрито е съдържание Добавено е съдържание
Заместване на съдържанието на страницата с „ == Ограничения и проблеми при SVN == Един от доста известните п...“
Етикети: Заместване Редакция чрез мобилно устройство Редакция чрез мобилно приложение
Ред 1:
{{към пояснение|Subversion|Subversion (пояснение)}}
{{ Софтуер
| име = Subversion (софтуер)
| лого =
[[Файл:Subversion-logo-cropped.png|250px|Subversion – logo]]
| разработчик = [[Apache Software Foundation]]
| последна_версия = 1.8.1
| операционна_система = [[Cross-platform]]
| програмен език = [[C (език за програмиране)|C]]
| жанр = Управление на версии
| лиценз = [[Apache лиценз]]
| уебсайт = {{URL|http://subversion.apache.org}}
}}
'''Subversion''' e софтуерна [[система за контрол на версиите]]. Проектът е разработен на база на концепцията [[отворен код]] ([[Open source|open-source]]). Системата използва централизирано хранилище за съхранените на файлови структури. Тя следи всички промени в директориите и файловете, поставени под неин контрол, като запазва всички стари копия със съответната дата и час, при постъпване на нови версии в хранилището. Това позволява на потребителя при нужда да се върне към по-стара версия на проекта или да разгледа в детайли историята на промените. Такава организация на съхранение на файловете улеснява съвместната едновременна работа на много хора над даден проект, работещи от различни места и в различни времеви зони. Тази система може да бъде използвана за всякакви колекции от файлове – от [[изходен код]] до домакински списъци за пазаруване.
 
Subversion е широко използвана система в [[Open source|open-source]] общността и се използва от редица известни проекти, включително Apache Software Foundation, KDE, Free Pascal, FreeBSD, GCC, Python, Django, Ruby, Mono, SourceForge.net, ExtJS and Tigris.org.
 
== История на Subversion ==
През 2000 г. новосъздадената американска компания [[CollabNet, Inc.]] започва да търси програмисти, които да напишат и развият заместител на [[CVS]] („Concurrent Versions System“ – първата система за контрол на версиите. Тя е [[Отворен код|open-source]] и поддържа мрежова връзка, което позволява на много програмисти от цял свят да работят заедно). Като първа такава система, [[CVS]] не е идеално изпипана и има много недостатъци, чието отстраняване става основна цел на програмистите. От CollabNet решават да започнат от нулата с нова система, като запазят основните идеи на CVS, но премахнат бъговете и грешките, които тя дава.
 
През февруари 2000 г. от CollabNet се свързват с Карл Фогел, автор на книгата ''Open Source Development with CVS (Coriolis, 1999)'' и му предлагат да се включи в работата по проекта за нова система за контрол на версиите. По стечение на обстоятелствата, точно по същото време Карл, съвместно с неговия приятел Джим Бланди, обмисля дизайн за нова такава система.<br /> През 1995 г., двамата с Джим Бланди създават фирмата ''Cyclic Software'', която предлага договори за поддръжка на CVS. Въпреки че скоро след това я продават, те продължават да използват CVS ежедневно в работата си и така се сблъскват с недостатъците ѝ, което ги навежда на мисълта, че е необходим по-добър начин за обработка и управление на информацията за версиите. Още преди да получи поканата от CollabNet за работа по проекта, Карл Фогел вече е наясно с основния дизайн и името на новата система – Subversion. Той веднага приема поканата за работа, а неговият приятел Джим Бланди успява да придума работодателя си, Red Hat Software, да го „дари“ за неопределен период от време на CollabNet, за да може да участва и той в работата по проекта.
 
През май същата година започва задълбочената работа по дизайна на новата система, в която се включват и Браян Белендорф и Джейсън Робинс от CollabNet, както и Грег Щайн, който по това време е независим разработчик на [[софтуер]]. Subversion бързо привлича интереса на голяма част от активните разработчици на софтуер. Става ясно, че много хора не са били доволни от работата на CVS и приветстват идеята най-сетне тя да бъде подобрена.
 
Като цяло работният екип на Subversion не се опитва да намери нови концепции за методологията на [[Система за контрол на версиите|системите за контрол на версиите]], а да поправи неизправностите на CVS.
 
След 14 месеца на разработка на 31.август 2001 г., Subversion получава собствен [[хостинг]]. Това е датата, на която разработчиците на Subversion спират да използват [[CVS]] за управлението на [[Изходен код|source кода]] на Subversion и започват да използват новоразработената система.
 
През 2009 г. CollabNet съвместно с разработчиците на Subversion успяват да интегрират проекта си в ''Apache Software Foundation (ASF)'' – един от най-известните колективи за [[Отворен код|open-source]] – проекти в света.
 
В началото на 2010 г. системата Subversion е напълно приета в семейството на топ-проектите на ASF, премества „уеб – присъствието“ си на ''www.subversion.apache.org'' и бива преименувана на ''„Apache Subversion“''.
 
== Начин на работа ==
Това, което прави една такава система полезна и ценна за разработчиците на софтуер е това, че предоставя възможност за подробно разглеждане на направените промени, които са довели до създаването на нова версия, за сравняване на версиите една с друга и за връщане на по-стара версия като актуална.
 
В основата на всяка една система за контрол на версиите, както е и при Subversion, стои хранилището на информация (''repository''). При постъпване на нова версия на файл в хранилището, старата му версия се съхранява с дата и час или с други думи, съхраняват се всички версии на даден файл в хронологичен ред. Едно типично Subversion-хранилище съдържа файлове на повече от един проект, като всеки проект е поддиректория във файловата система на хранилището. Системата съхранява също и автора на всяка версия – по тази причина при свързване с хранилището всеки потребител се идентифицира с име и парола. Потребителите имат различни права – или да редактират файла (т.е. да запазват нови версии в хранилището) или само да четат данни. Тъй като повечето софтуерни продукти могат да работят само с по една версия на даден файл, а не с всички наведнъж, потребителят получава ''работно копие (working copy)'' на нужните му файлове, което съдържа изисканата от него версия от хранилището (в типичния случай – най-актуалната) и работи с него.
 
Системите за контрол на версиите могат да работят по един от следните модели – ''„заключи – промени – отключи“'' („lock – modify – unlock“) и ''„копирай – промени – слей“'' („copy – modify – merge“). Subversion работи по втория, но нека разгледаме и двата:
* Моделът ''„Заключи – промени – отключи“'' – този модел предотвратява успешно сценарии, при които двама потребители работят едновременно върху работно копие на проекта и в крайна сметка единият публикува промените си преди другия и след публикуването и на промените на втория, тези на първия биват загубени. Въпреки това този модел не е сигурен. Той позволява само на един потребител да работи върху проекта в дадения ден и час. След получаването на работното копие, потребителят заключва файла и едва тогава има възможност да го променя. След приключване на работата с дадения файл, потребителят отключва файла и той става достъпен за обработка и от останалите. Проблемите с този модел са следните:
# след заключване на файл, потребителят може да забрави да го отключи и това да доведе до невъзможност за работа на другите потребители
# заключването може да доведе до излишна сериализация на файла – един потребител променя началото, а друг – края. Промените не се застъпват и те спокойно могат да ги правят и едновременно, след което да слеят двата проекта. Няма нужда да се правят нови версии в случая.
# Заключването води до фалшиво чувство за сигурност – моделът позволява на различни потребители да работят върху различни файлове едновременно, но в случай, че двата файла зависят един от друг, моделът не дава гаранция, че информацията няма да се промени фатално.
 
* Моделът ''„Копирай – промени – слей“'': Този модел работи по следния начин: всеки потребител се свързва с хранилището на проекта и получава свое собствено работно копие. Всеки работи самостоятелно върху копието си. Накрая отделните копия се сливат в една финална версия. Системата за контрол на версиите подпомага сливането, но при големи застъпвания в информацията е необходима и човешка намеса преди финализирането на новата версия на проекта.
 
При всяко обновяване на хранилището в Subversion, или всички промени биват приети, или никои от тях. В случай на приемане следва създаване на ново състояние на файловата система на хранилището, наречено „ревизия“. Всяка ревизия има уникален номер, по-голям с единица от този на предходната. При създаването на хранилището на даден проект ревизията е с номер 0 и се състои от празна директория.
 
=== Команди за работа в Subversion ===
'''svn checkout''' – получаване на работно копие за някое от поддърветата на хранилището. Пример:
 
<code>$ svn checkout http://svn.example.com/repos/nature<br />
A nature/Makefile<br />
A nature/plants.c<br />
A nature/animals.c<br />
Checked out revision 56.<br />
$ ls -A calc<br />
Makefile plants.c animals.c .svn/<br />
$</code>
 
Буквата А в началото на реда означава, че Subversion добавя определен брой елементи в работното копие. Допълнението „ – .svn –„ е файл, който пази системната информация на Subversion по поддръжката на работното копие – точно време на създаването му и състоянието на последната ревизия преди създаването на работното копие. Точно този файл .svn отчита дали са направени промени в оригиналния файл.
* '''svn commit''' – изпращане на промените към хранилището. След тази команда, всички нови работни копия съдържат направените промени. Може да бъде добавено и съобщение за направените промени при изпращането им с текущата команда. Например: <code>svn commit plants.c -m "Fixed names in plants.c."</code>
* Ако междувременно още някой работи върху работно копие на същия файл, който първият потребител е променил, той остава с неактуално копие. За целта се използва другата команда '''svn update''', която актуализира работното копие на втория потребител, като му добавя промените, запаметени от първия след края на работата му. Не е необходимо уточняване на това, кой точно файл трябва да бъде актуализиран. Subversion го намира сам, използвайки информацията от .svn файла.
* '''svn help <subcommand>''' – описва употребата на командата, написана на мястото на ''<subcommand>'', като включва нейните синтаксис, опции и поведение. Пример: <code> $ svn help update </code>.
 
Има два начина за добавяне на нови файлове в хранилището на 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.png|мини|TortoiseSVN – подменю]]
'''TortoiseSVN''' – свободен open-source Windows-инструмент за ''Apache Subversion'' с лиценз от ''GNU General Public License (GPL)''. Управлява файлове и директории в реално време. TortoiseSVN се интегрира безпроблемно в Windows-обвивката (като например Windows Explorer). Това позволява на потребителя да продължи да работи с инструментите, с които е свикнал, без да му се налага да отваря приложението всеки път при необходимост от използване функциите за контрол на версиите, предоставени от Subversion.
 
Контекстното меню на TortoiseSVN е съвместимо с различни файлови мениджъри, което не задължава потребителя да използва Windows Explorer-a, може да го достъпва и чрез File/Open-диалоговия прозорец.
 
Състоянието на всеки файл с подверсии в себе си се индицира от малка иконка върху тази на файла. По този начин потребителят вижда в какво състояние е работното му копие.
 
Всички команди от Subversion са достъпни от контекстовото меню, където TortoiseSVN добавя и свое подменю.
 
'''SmartSVN''' – инструмент за ''Apache Subversion'' с платен лиценз. Написан е на [[Java]] и е съвместим с три различни операционни системи – [[Windows]], [[Linux]] и [[Mac OS X]]. От 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 например е <code>blsvn copy ~../trunk ~../tags/NewTag</code>. blsvn разширява сам аргументите си и така ги изпраща на Subversion. С инсталирането на този инструмент, потребителят не се задължава да използва само съкратени записи на пътищата. На тях се гледа като на опция.
 
'''KDESVN''' – инструмент на Subversion, който поддържа режим на преглед на кода с описание на разликите между две версии във всеки ред и с бележка кой е направил промените. Този инструмент предлага и 3D графична визуализация на source-код дървото. Разработен е на С++ и използва библиотеките на KDE.
 
'''RabbitVCS''' – инструмент на Subversion, пригоден за работа през Linux. Той добавя функциите на системата за контрол на версиите към файловите мениджъри [[Nautilus]] и [[Thunar]] и предлага plugin-и за редактора [[Gedit]]. RabbitVCS може да се използва и за работа с [[Git (софтуер)|Git]].
 
'''WebSVN''' – инструмент, който предлага онлайн преглеждане на хранилището, историята на промените, коментарите при качване на нова версия на даден файл или директория, както и отваряне на кода в режим на цветно синтактично преглеждане. В последния режим кодът не може да бъде променян. WebSVN е разработен на PHP и се отваря през browser.
<br /><br />
 
== Таблица на основните инструменти на Subversion ==
{| class="wikitable sortable"
|-
! Име !! Език, на който е разработен !! Операционна система !! Лиценз !! Интегриране !! Език !! Мрежови протоколи !! Текуща версия !! Дата на последното обновяване
|-
| AgentSVN || C, C++ || [[Microsoft Windows]] || платен, trial-версия || всякакви MS-SCCI съвместими среди (IDE), например [[Microsoft Visual Studio]], [[Microsoft SQL Server|Microsoft SQL Server Management]], [[PowerBuilder]], Zeus и др. || Английски || http, https, svn, svn+ssh, file || 1.95 || {{Стартова дата и възраст|2012|02|07}}
|-
| AnkhSVN || C# || [[Microsoft Windows]] || Apache License || Microsoft Visual Studio (всички версии, освен Express) || Английски || http, https, svn, svn+ssh, file || 2.5.12266 || {{Стартова дата и възраст|2013|11|12}}
|-
| blsvn || C++ || Microsoft Windows || MIT || command-line wrapper || Английски || http, https, svn, svn+ssh, file || 0.1 || {{Стартова дата и възраст|2010|04|12}}
|-
| Cascade || || [[Линукс|Linux]], [[Mac OS X]], Microsoft Windows || платен, свободен за използване само в бизнес условия || Windows – обвивката (Windows Explorer), драйвър за файлови системи || Английски || http, https, svn || 1.2.0.1069 || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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) || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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) || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|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 || {{Стартова дата и възраст|2013|10|29}}
|-
| WebSVN || PHP || [[Linux]], [[Unix]], [[Mac OS X]], [[Microsoft Windows]] || GPL || web-базиран || повече от 25 езика || || 2.3.3 || {{Стартова дата и възраст|2011|06|27}}
|-
| VisualSVN || || Microsoft Windows (32/64-bit) || платен || Microsoft Visual Studio (всички версии освен Express) || Английски || http, https, svn, svn+ssh, file || 4.0.1 || {{Стартова дата и възраст|2013|10|30}}
|}
 
== Ограничения и проблеми при SVN ==
Един от доста известните проблеми при Subversion е свързан с командата за преименуване на файл и папка. От 2013 година Subversion направиха преименуването на файл или папка да става, чрез „копиране“ на новото име, последвано от „изтриване“ на старото име. Проблемът идва от това, че промяната остава само в името, докато всички връзки на файлове и папки остават както преди. Оттук идват и проблемите при преместване на файлове между папките. Във версия 1.5 на Subversion някои от тях бяха отстранени, но във версия 1.8 тези проблеми бяха отстранени вече окончателно.
 
И до този момент (2013 година) Subversion има сериозен недостиг на качествени инструменти за администрация на съдържанието. Например някой може да иска да изтрие перманентно всички исторически записи на определени файлове. Това не е възможно да се осъществи с вградените средства на Subversion.
 
Subversion записва доста допълнителни копия от файловете на локалната машина на потребителя. Това може да се окаже сериозен проблем когато се работи по големи проекти или файлове, или когато разработчиците работят по няколко проекта едновременно. Във версиите преди 1.7 директориите .svn на клиентската страна може да се повредят.
 
Subversion не записва датата, на която даден файл е бил модифициран. Файловете които се подават към хранилището съдържат единствено датата на чекване, но не и датата на която е направена модификацията. Това доста често не е желаната информация. Това нещо се осъществява от допълнителни програми (Third Party).
 
== Източници ==
И до този момент (2013 година) Subversion има сериозен недостиг на качествени инструменти за администрация на съдържанието. сериозен проблем и да се повредят.
* [http://svnbook.red-bean.com/en/1.7/svn-book.pdf 1. Version Control with Subversion (For Subversion 1.7) – Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato]
* [http://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html 2. TortoiseSVN 1.7 Beginner's Gui – Lesley A. Harrison]
* [http://www.smartsvn.com/ 3. Official website of SmartSVN]
 
== Външни препратки ==