Кіріспе
Ашық және еркін кодты бағдарламалық жасақтама нұсқаларын басқару және өзгертулерді тіркеу жүйесі
Apache Subversion (жиі SVN деп қысқартылады, бұл оның svn командалық атауынан туындайды) – Apache лицензиясы бойынша ашық код ретінде таратылатын бағдарламалық жасақтама нұсқаларын басқару және өзгертулерді тіркеу жүйесі. Бағдарламалық жасақтаманы әзірлеушілер Subversion-ды бастапқы код, веб-беттер және құжаттама сияқты файлдардың ағымдағы және тарихи нұсқаларын сақтау үшін пайдаланады. Оның мақсаты – кеңінен қолданылатын Concurrent Versions System (CVS) жүйесінің негізінен үйлесімді ізбасары болу. Ашық кодты қауымдастық Subversion-ды кеңінен қолданды: мысалы, Apache Software Foundation, FreeBSD, SourceForge және 2006 жылдан 2019 жылға дейін GCC сияқты жобаларда. CodePlex бұрын Subversion репозиторийлерінің кең таралған хосты болды. Subversion 2000 жылы CollabNet Inc. компаниясы құрды, қазір ол Apache жобасының жоғары деңгейі болып табылады және оны әлемдік қауымдастық құрастырып, пайдаланады.
Тарих
CollabNet 2000 жылы Subversion жобасын CVS сияқты жұмыс істейтін, бірақ қателерді түзететін және CVS-те жоқ кейбір мүмкіндіктерді қамтитын ашық бастапқы кодты нұсқаны басқару жүйесін жасау үшін құрды. 2004 жылдың ақпан айында 1.0 нұсқасы жарияланды. 2009 жылдың қарашасында Subversion Apache Incubator-ға қабылданды: бұл стандартты Apache жоғары деңгейлі жобасы болу процесінің басталуын білдірді. 2010 жылдың 17 ақпанында ол Apache-дің жоғары деңгейлі жобасына айналды. Нұсқа Бастапқы шығарылу күні Соңғы шығарылу күні Күйдесі 2004 02 23 1.0.9 2004 10 13 Қолдауы тоқтатылды 2004 09 29 1.1.4 2005 04 01 Қолдауы тоқтатылды 2005 05 21 1.2.3 2005 08 19 Қолдауы тоқтатылды 2005 12 30 1.3.2 2006 05 23 Қолдауы тоқтатылды 2006 09 10 1.4.6 2007 12 21 Қолдауы тоқтатылды 2008 06 19 1.5.9 2010 12 06 Қолдауы тоқтатылды 2009 03 20 1.6.23 2013 05 30 Қолдауы тоқтатылды 2011 10 11 1.7.22 2015 08 12 Қолдауы тоқтатылды 2013 06 18 1.8.19 2017 08 10 Қолдауы тоқтатылды 2015 08 05 1.9.12 2019 07 24 Қолдауы тоқтатылды 2018 04 13 1.10.8 2022 04 12 Қолдауы тоқтатылды 2018 10 30 1.11.1 2019 01 11 Қолдауы тоқтатылды 2019 04 24 1.12.2 2019 07 24 Қолдауы тоқтатылды 2019 10 30 1.13.0 2019 10 30 Қолдауы тоқтатылды 2020 05 27 1.14.2 2023 12 20 Толық қолдау көрсетіледі, LTS 2024 05.1.1 (әлі жарияланбаған) Дамыстыруда
Шығарылу күндері Apache Subversion-нің файлынан алынды, онда барлық шығарылу тарихы тіркелген.
Ерекшеліктері
Commits - нағыз атомдық операциялар (CVS-дегі үзілген commit операциялары репозиторийдің дұрыс болмауына немесе зақымдануына әкелуі мүмкін). Жүйе каталогтар мен кейбір файлдардың метадеректерінің нұсқаларын сақтайды (Қасиеттерді қараңыз). Пайдаланушылар файлдарды және толық каталог ағаштарын өте жылдам жылжытуға немесе көшіруге болады, сонымен бірге толық өзгеру тарихын сақтайды (түпнұсқа нысанға сілтеме арқылы іске асырылады). Символикалық сілтемелердің нұсқаларын жасау. Бинарлық файлдарға түпкілікті қолдау, орынды тиімді пайдаланатын бинарлық айырмашылықтарды сақтау. Желілік сервер ретінде Apache HTTP сервері, протокол үшін WebDAV/Delta V. Сонымен қатар, TCP/IP арқылы арнайы протоколды пайдаланатын svnserve деп аталатын тәуелсіз сервер процесі бар. Бранчтау каталогты көшіру арқылы іске асырылады, сондықтан бұл операция файл мөлшеріне тәуелді емес, арзан операция болып табылады. Түпкілікті клиент-серверлік, қабатталған кітапхана дизайны. Клиент/сервер протоколы екі бағытта да айырмашылықтарды жібереді. XML журналдық шығысын қоса, талдауға болатын шығыс. Ашық кодты лицензия – Apache License 1.7 нұсқасынан бастап; бұрынғы нұсқалар Apache бағдарламалық қамтамасыз ету лицензиясының 1.1 нұсқасынан алынған нұсқаны пайдаланады. Халықаралық деңгейде қолдауға ие бағдарламалық хабарламалар. Біріктіруге болмайтын файлдарды құлыптау ("резервтелген тексерулер"). Жолға негізделген рұқсаттама. C#, PHP, Python, Perl, Ruby және Java тілдеріне байланыс. Толық MIME қолдауы – пайдаланушылар әрбір файлдың MIME түрін көре алады немесе өзгерте алады, ал бағдарламалық қамтамасыз ету MIME түрлерінің бұрынғы нұсқалардан қандай айырмашылықтары бар екенін көрсете алады. Біріктіруді қадағалау – бранчтар арасындағы біріктірулер қадағаланады, бұл Subversion-ға нені біріктіру керектігін және нені біріктірудің қажеті жоқ екенін айтпастан бранчтар арасында автоматты біріктіруге мүмкіндік береді. Өзгертулер тізімдері коммиттерді өзгертулер тобына жинақтау үшін.
Депозитор түрлері
Subversion екі түрлі репозиторий сақтау ұсынады.
Беркли DB (өшірілген)
Subversion-ның бастапқы әзірлемесі Беркли DB жинағын пайдаланды. Деректер қорына қол жеткізетін бағдарлама қатенің салдарынан немесе мәжбүрлі түрде тоқтатылған кезде Subversion-ның Беркли DB пайдалануында кейбір шектеулер бар. Дерек жоғалмайды немесе бұзылмайды, бірақ Беркли DB журналды қайта ойнап, белгілі бір құлыптарды тазартып бітіргенше репозиторий желіден тыс болып қалады. Беркли DB репозиторийімен Subversion-ды пайдаланудың ең қауіпсіз тәсілі – жалпы файлдық жүйе арқылы емес, бір пайдаланушы атынан жұмыс істейтін бір серверлік процесті пайдалану болып табылады. Беркли DB артқы интерфейсі 1.8 нұсқасында қолданудан шығарылды.
Қасиеттері
Subversion файлдық жүйенің маңызды ерекшелігі – қасиеттер: мәтіннің қарапайым атау=мәні жұптары. Көптеген қасиеттер файлдық жүйелік жазбаларда (яғни файлдар мен каталогтарда) кездеседі. Бұл қасиеттер файлдық жүйедегі басқа өзгерістер сияқты нұсқаланады. Subversion клиенті құрастырылған қасиеттер үшін «svn:» префиксін резервтейді, бірақ жеке қасиеттерді анықтау үшін басқа атауларды қолдануға болады. Unix-қожайынды жұмыс көшірмелерінде файл жүйесі қолдаған жағдайда файлды орындалатын етіп жасайды. Файлдың интернеттік медиа типін («MIME типі») сақтайды. Айырмашылықтарды (diffs) және біріктіруді өңдеуге әсер етеді. Каталогта назардан тыс қалдырылатын файл атауларының үлгілерінің тізімі. CVS-тің cvsignore файлына ұқсас. Өзгерістер енгізілген кезде файлға қойылатын кілт сөздер тізімі. Бұл ақпаратты (мысалы, автор, соңғы өзгерту күні, нұсқа нөмірі) адамның араласуынсыз файлда сақтау үшін қолданылады. Кілт сөзді алмастыру механизмі RCS және CVS-тен бастау алады. Клиентті мәтін файлдарындағы жол соңындағы символдарды түрлендіруге мәжбүрлейді. Жұмыс көшірмесі белгілі бір EOL стилімен қажет болған кезде қолданылады. «native» әдетте қолданылады, сонда EOL пайдаланушының операциялық жүйесінің (OS) EOL стиліне сәйкес келеді. Репозиторийлерде осы қасиеттің барлық файлдарда болуы талап етілуі мүмкін, себебі сәйкес келмейтін жол соңдары проблема тудыруы мүмкін. Басқа репозиторийлердің бөліктерін автоматты түрде кіші каталогқа шығаруға мүмкіндік береді. Файлдың тек оқуға рұқсат етілген күйде шығарылуын көрсетеді. Бұл құлыптау механизмімен бірге пайдалануға арналған. Тек оқуға рұқсат берілген күй, файлды өзгерту алдында құлыпты алу керектігін еске салады: құлыпты алу файлды жазуға мүмкіндік береді, ал құлыпты босату оны қайтадан тек оқуға айналдырады. Құлыптау тек коммит операциясы кезінде күшіне енеді. Құлыптарды осы қасиетті орнатпастан да пайдалануға болады. Дегенмен, мұндай жағдайда файлды құлыптағанда оны өзгерту қаупі бар, себебі оның құлыпталғанын тек сәтсіз коммит кезінде ғана білесіз. Бұл қасиетті пайдаланушылар тікелей орнатуға немесе өзгертуге арналмаған. Ол репозиторийдегі символдық сілтемелерді жасау үшін ғана қолданылады. Символды сілтеме репозиторийге қосылғанда, сілтеме нысаны бар файл осы қасиетпен бірге жасалады. Unix сияқты жүйе осы файлды тексергенде, клиент оны символдық сілтемеге айналдырады. Subversion 1.5 (немесе одан кейінгі) нұсқаларында біріктіру деректерін (нұсқа нөмірлерін) қадағалау үшін қолданылады. Бұл қасиет командамен автоматты түрде сақталады және оның мәнін қолмен өзгерту ұсынылмайды. Subversion нұсқаларда да қасиеттерді пайдаланады. Файл жүйелік жазбалардағы жоғарыда аталған қасиеттер сияқты, атаулар да толығымен кездейсоқ, бірақ Subversion клиенті «svn:» префиксімен белгілі бір қасиеттерді пайдаланады. Алайда, бұл қасиеттер нұсқаланбайды және егер алдын ала ревизиялық өзгерту ілгіші рұқсат берсе, оларды кейінірек өзгертуге болады. Нұсқаның күні мен уақыты. Өзгерісті жіберген пайдаланушының аты. Пайдаланушы берген өзгерістің сипаттамасы.
Бәсекелестік және таңбалау
Subversion тармақтар мен тегтерді іске асыру үшін Perforce-тен файлдар аралық тармақтану моделін пайдаланады. Тармақ – дамудың жеке желісі. Тегтеу – болашақта оңай табу үшін белгілі бір уақытта репозиторийге маркер қою. Subversion-да тармақтар мен тегтердің арасындағы жалғыз айырмашылық – олардың қолданылу әдісі. Жаңа тармақ немесе тег "" командасын қолдану арқылы құрылады, оны операциялық жүйенің өздік механизмі орнына пайдалану керек. Көшірілген каталог репозиторийдегі түпнұсқамен байланыстырылып, тарихы сақталады, ал көшірме репозиторийде өте аз орын алады. Әр тармақтағы барлық нұсқалар файлдың көшірілген сәттен бұрынғы тарихын және содан кейін жасалған барлық өзгерістерді сақтайды. Өзгерістерді негізгі тармаққа немесе тармақтар арасына "біріктіруге" болады.
Шектеулер мен проблемалар
Subversion-да белгілі бір мәселе файл мен каталогтың атын өзгерту операциясын жүзеге асыруға әсер етеді. 2014 жылдан бастап Subversion файлдар мен каталогтарды жаңа атауға "көшіру" арқылы қайта атауды жүзеге асырады, содан кейін ескі атау "жойылады". Тек атаулар өзгереді, өңдеу тарихындағы барлық деректер сол күйінде қалады, ал Subversion ескі атауды "ағаш" құрылымының ескі нұсқаларында да қолданады. Дегенмен, Subversion басқа жерде жасалған өзгертулермен келіспеушілік туғанда, әдеттегі жаңартуларда да, тармақтарды біріктіргенде де шатасуы мүмкін. Subversion 1.5 нұсқасы осы жағдайлардың кейбіреуін шешті, ал қалғандары проблемалық болып қалды. Subversion 1.8 нұсқасы клиенттегі операцияларды жаңарту арқылы осы мәселелердің бір бөлігін шешті, бірақ репозиторийде бәрібір көшіру және жою ретінде қарастырылады. Subversion-да репозиторийді басқару және әкімшілдік жұмыстарға қатысты кейбір мүмкіндіктер жетіспейді. Мысалы, біреу репозиторийдегі белгілі бір деректердің тарихын толығымен жоюды қалауы мүмкін. Subversion мұны тікелей іске асыруға мүмкіндік бермейді. Subversion жергілікті машинада деректердің қосымша көшірмелерін сақтайды, бұл өте үлкен жобалар немесе файлдар үшін, немесе егер әзірлеушілер бірнеше тармақпен бірден жұмыс істесе, қиындық тудыруы мүмкін. 1.7 нұсқасына дейін клиенттік жақтағы svn каталогтары, жаһандық іздеу/ауыстыру операциялары сияқты пайдаланушының дұрыс емес әрекеттерінен зардап шегуі мүмкін. 1.7 нұсқасынан бастап Subversion әр жұмыс кеңістігі үшін бір орталықтандырылған қалта қолданады. Subversion файлдардың өзгертілген уақытын сақтамайды. Сондықтан, Subversion репозиторийінен алынған файлда "қазіргі" күн көрсетіледі (репозиторийдегі өзгерту уақыты емес), ал репозиторийге салынған файлда салынған күні көрсетіледі (файлдағы өзгерту уақыты емес). Бұл әрқашан қалаған нәтиже болмауы мүмкін. Мұны жеңілдету үшін, өзгерту уақытын және басқа файл жүйесінің метадеректерін сақтауға мүмкіндік беретін үшінші тараптық құралдар бар. Дегенмен, алынған файлдарға ағымдағы күнді қою да маңызды, өйткені make(1) сияқты құралдар оны қайта құру үшін өзгертілген файлды осылай анықтайды. Subversion орталықтандырылған нұсқаны басқару моделін қолданады. Subversion-ның дизайнерлерінің бірі Бен Коллинз Суссман орталықтандырылған модельдің "қауіпсіз бағдарламашыларды" өз жұмыстарын команда мүшелерінен жасырудан сақтайтынына сенімді. Нұсқаны басқару жүйелерінің кейбір пайдаланушылары орталықтандырылған модельді зиянды деп санайды; әйгілі Линус Торвальдс Subversion моделіне және оның әзірлеушілеріне сын айтты. Subversion көбінесе HFS+ файлдық жүйесімен орындалатын файл атауын қалыпқа келтірумен дұрыс жұмыс істемейді. Бұл HFS+ емес файлдық жүйедегі репозиторийге акценттері бар аттары бар файлдар қосылғанда және репозиторий HFS+ арқылы қолданылғанда проблемалар тудыруы мүмкін.
Даму және іске асыру
CollabNet Subversion-мен жұмысын жалғастырды, бірақ жоба тәуелсіз ашық кодты қауымдастық ретінде жұмыс істейді. 2009 жылдың қарашасында жоба Apache Incubator-ға қабылданды, Apache Software Foundation күш-жігерінің бір бөлігі болу мақсатымен. 2010 жылдың наурызынан бастап жоба Apache Top Level Projects құрамына кіретін Apache Subversion деп аталады. 2009 жылдың қазан айында WANdisco компаниясы Subversion-ның негізгі жасаушыларын жұмысқа алғанын жариялады, компания жобаның маңызды корпоративтік демеушісіне айналды. Бұл 2008 жылдың басынан бері Subversion корпорациясының президенті және Subversion жобасының шығарылым менеджері болған Хайрум Райтты қамтыды, ол компанияның ашық кодты командасын басқару үшін қосылды. Subversion ашық кодты қауымдастығы бинарлық файлдарды ұсынбайды, бірақ әлеуетті пайдаланушылар еріктілерден бинарлық файлдарды жүктей алады. Subversion жобасы Subversion-мен пайдалануға арналған ресми графикалық интерфейске (GUI) ие болмаса да, үшінші тараптар көптеген әртүрлі GUI-лерді, сондай-ақ қосымша бағдарламалық жасақтаманы жасады. 2009 жылы жарияланған жұмыстарға SubversionJ (Java API) және Perforce-тағыдай Obliterate командасын енгізу кірді. Бұл екі жақсартуды WANdisco демеушілік етті. Subversion жасаушылары әдетте бір уақытта даму үстінде кемінде бір немесе екі жаңа мүмкіндікке ие. 2011 жылдың қазан айында шыққан Subversion 1.7 нұсқасы өнімділікті жақсарту үшін оңайлатылған HTTP протоколын және қайта жазылған жұмыс көшірмесі кітапханасын қамтыды. 2002 жылы Subversion логотипін таңдау үшін дизайн байқауы өткізілді. Түпнұсқа жазбалар мен әр логотипке берілген дауыстарды осы жерден табуға болады. Қазіргі логотип байқауда ең көп дауыс алды.