Доскоро си мислех, че съществуват само две читави системи за контрол на версиите -- Microsoft Visual SourceSafe и CVS. Първата обикновено се използва в корпоративна среда, където властва Windows. Втората е де-факто стандарт за свободния софтуер и разбира се е многоплатформена.
Това, което винаги ме е стягало в чепика за SourceSafe, освен че е несвободен софтуер, е липсата на модел клиент/сървър. SourceSafe всъщност разчита на споделена файлова система като хранилище. Работата в Интернет е невъзможна.
При CVS няма такива проблеми, но има други. Например, какво ще кажете за директорията Attic? Гадно. Заради проблемите с изтриването и преименуването на файлове, местенето на директории и прочие, CVS не успява докрай да спази голямото обещание на всяка система за контрол на версиите -- а именно, че може да възстанови състоянието на дървото точно такова, каквото е било в определен момент от времето. Ако си затворим очите и гледаме да няма динамика на директориите и имената на файловете, които държим под контрол на версиите, всичко е OK, но все пак...
Със своя режим клиент/сървър и модел на споделяне без заключване, CVS изигра и продължава да играе голяма роля за разработването на свободен софтуер. Струва ми се, обаче, че на CVS му се случи най-доброто, което можеше да споходи един читав софтуер -- оригиналните му автори да го зарежат и да започнат отначало, вече преосмислили идеята си.
Тъкмо това е проектът Subversion. Авторите му твърдят, че Subversion е "CVS реализиран по правилния начин". Основният модел на работа е запазен, потребителите на CVS ще се чувстват в свои води, но всичко е реализирано перфектно -- силно опростено, и много по-мощно! Вече можете да преименувате и местите файлове и дори цели директории из хранилището -- при това те запазват пълната информация за историята си. Ако се върнете няколко ревизии назад всичко ще се реаранжира както си е било.
Хранилището е напълно преосмислено и силно оптимизирано. Например ако копирате един файл от една директория в друга. Същото се отнася и за мрежовия трансфер -- когато изпращате своите редакции към сървъра, всъщност пращате diff-ове. Така си спестявате мрежовото натоварване след малки промени в големи файлове. Операциите Commit вече представляват истински транзакции и са напълно атомарни. Отвътре целият дизайн е модулен -- можете да сложите собствен backend вместо стандартния Berkeley DB, можете да добавите нов метод за достъп до сървъра и прочие. Авторите на frontend-интерфейси ще се родят, защото техният интерфейс ще може да се свърже директно към libsvn -- стандартната клиентска библиотека на C, която се ползва и от конзолния клиент. Край на "парсването" на изхода на конзолата! Работи се и по binding-и към Java, Perl и Питон.
И най-важното е, че Subversion от известно време вече е стабилен и се ползва интензивно от самите му автори. Ако ползвате система за контрол на версиите, горещо Ви препоръчвам веднага да прочетете Version control with Subversion!



