omstörtning | |
---|---|
Sorts | centraliserat versionskontrollsystem [d] , Apache Foundation-projekt [d] ochöppen källkod |
Författare | CollabNet [d] |
Utvecklaren | Apache Software Foundation |
Skrivet i | C [4] [5] , Python [4] , C++ [6] [7] och Java [6] [7] |
Operativ system | GNU/Linux [8] , Microsoft Windows [8] , macOS [8] och BSD [8] |
Första upplagan | 20 oktober 2000 [1] |
senaste versionen | |
Läsbara filformat | SVN-dumpformat (v1) [d] , SVN-dumpformat (v2) [d] , SVN-dumpformat (v3) [d] och SVN-dumpformat (generiskt) [d] |
Genererade filformat | SVN-dumpformat (v1) [d] , SVN-dumpformat (v2) [d] , SVN-dumpformat (v3) [d] och SVN-dumpformat (generiskt) [d] |
Licens | Apache License 2.0 [9] |
Hemsida | subversion.apache.org _ |
Mediafiler på Wikimedia Commons |
Subversion [10] (även känd som " SVN " [11] ) är ett gratis centraliserat versionskontrollsystem som officiellt släpptes 2004 av CollabNet . Sedan 2010 har Subversion varit ett projekt av Apache Software Foundation och heter officiellt Apache Subversion (registrerat varumärke [12] ).
Målet med projektet i början av utvecklingen var att ersätta [13] [14] det då utbredda Concurrent Versions System (CVS), som nu anses föråldrat [15] [16] [17] . Subversion implementerar alla huvudfunktionerna i CVS och är fri från några av de senares brister.
Subversion används fortfarande av vissa open source -gemenskaper (inklusive de som använde CVS tidigare ), men nästan alla större projekt har flyttat till DVCS . Bland de sista användarna av Subversion bland öppna projekt återstår FreeBSD , men de tillkännagav också en övergång till Git [18] , och till exempel Free Pascal . Subversion har använts under ganska lång tid av så välkända projekt som Apache , GCC , FFmpeg , LLVM . Subversion används också i privata projekt och företagsvärlden, men det är svårt att bedöma hur brett. Subversion- värd , inklusive för projekt med öppen källkod, tillhandahålls också av populära värdprojekt SourceForge.net , Tigris.org , Google Code och BountySource .
År 2007 bedömde Forrester , ett analysföretag , Subversion som "den enda ledaren i kategorin Fristående Software Configuration Management (SCM) och en stark bidragsgivare i kategorin Software Configuration and Change Management (SCCM)" när man jämförde fördelarna och nackdelarna med olika system . [19]
Enligt statistik om användningen av Linux- paket - Debian [20] och Ubuntu [21] distributioner , nådde antalet aktiva användare av Subversion en topp runt 2010 och har börjat minska sedan 2016. Det finns dock fortfarande fler projekt som använder Subversion än att använda CVS , Mercurial och Bazaar (från och med augusti 2019 ).
Den officiella dokumentationen placeras [22] av boken publicerad av O'Reilly Media , som är fritt tillgänglig [23] och läggs till av författarna när nya versioner av SVN släpps. Den publicerar också sina översättningar till ett antal språk, inklusive ryska, men trots att de engelska versionerna av boken nu beskriver versionerna 1.8 och 1.7, finns det bara böcker på ryska som beskriver versioner upp till 1.4 inklusive [24] .
Utvecklingen av Subversion började år 2000 på initiativ och med ekonomiskt stöd från CollabNet. Initiativtagarna till projektet ville skapa ett gratis versionskontrollsystem, i princip likt CVS, men utan dess buggar och olägenheter . På den tiden fanns det inga bästa program av denna klass med gratis licens, CVS var de facto standarden bland fri mjukvaruutvecklare. Genom att välja det som baslinje hoppades Subversion-utvecklarna kunna förenkla utvecklingen genom att utnyttja redan beprövade koncept, samtidigt som det skulle göra det lättare för många CVS-användare att migrera till det nya systemet. [25]
Viktiga händelser i Subversions utvecklingshistoria.
Subversion är ett centraliserat system (till skillnad från distribuerade system som Git eller Mercurial ), vilket innebär att data lagras i ett enda arkiv. Lagret kan finnas på en lokal disk eller på en nätverksserver .
Att arbeta i Subversion skiljer sig inte mycket från att arbeta i andra centraliserade versionskontrollsystem. Klienter kopierar filer från valvet för att skapa lokala arbetskopior, gör sedan ändringar i arbetskopiorna och överför dessa ändringar till valvet. Flera klienter kan komma åt lagringen samtidigt. Subversion använder i första hand kopiera-modifiera-sammanfogningsmodellen för att samarbeta med filer . För filer som inte går att sammanfoga (olika binära filformat) kan du också använda lock-modify-unlock- modellen .
När nya versioner sparas används deltakomprimering : systemet hittar skillnader mellan den nya versionen och den tidigare och skriver bara dem, vilket undviker dataduplicering.
När du använder WebDAV-åtkomst stöds också transparent versionshantering - om någon WebDAV-klient öppnas för skrivning och sedan sparar en fil som är lagrad på en nätverksresurs skapas en ny version automatiskt.
Subversion erbjuder två alternativ för att organisera förråd [40] . Förråd av den första typen används för att lagra en databas baserad på Berkeley DB , förråd av den andra typen är vanliga filer av ett speciellt format (dataåtkomst organiseras med hjälp av deras egna bibliotek, utan att använda tredjepartsdatabaser). Subversion-utvecklarna refererar ofta till lagring som ett "filsystem", vilket är anledningen till att den andra typen kallas FSFS, vilket betyder ett (versionerat) filsystem ( engelsk filsystem ) ovanpå ett (vanligt) filsystem.
Båda typerna av arkiv ger tillräcklig tillförlitlighet när de är korrekt organiserade [41] (Berkeley DB använder fillås, så det kan inte användas på vissa nätverksfilsystem som inte stöder lås), var och en av dem har sina egna fördelar och nackdelar. Man tror att FSFS är lättare att korrekt konfigurera, det kräver mindre uppmärksamhet från administratören. Dessutom, före release 1.4, kunde repositories som använder Berkeley DB, under vissa förhållanden, hamna i ett så kallat wedged state ; administratörsingripande krävdes för att återställa dess funktionalitet.
Från och med version 1.2 används FSFS som standard för nya lagringar. Med version 1.8 fasades användningen av Berkeley DB ut [37] . Nya funktioner som kommer att läggas till i framtida versioner kanske inte fungerar på servrar som använder Berkeley DB. Stödet för Berkeley DB kan komma att upphöra i framtiden.
Subversion tillhandahåller följande sätt att komma åt ett arkiv:
Alla dessa metoder kan användas för att arbeta med båda typerna av arkiv (FSFS och Berkeley DB). Olika metoder kan användas samtidigt för att komma åt samma arkiv.
Ur användarens perspektiv är Subversion-förrådet ett "tvådimensionellt" filsystem . Objekt i ett arkiv ( filer och kataloger ) identifieras av två " koordinater ": ett namn och ett revisionsnummer . Med andra ord, förvaret är en uppsättning ögonblicksbilder (revisioner) av ett träd av filer och kataloger, indexerade med revisionsnumret. Varje sådan ögonblicksbild är ett vanligt (endimensionellt) filsystem.
Om det är nödvändigt att ange en specifik revision av ett objekt, används en inmatning av formuläret: имя@ревизияt.ex. /main.c@29 filen /main.c i revision 29. En sådan indikation på revisionen som används för att förtydliga namnet kallas peg revision .
På fig. 1 visar en grafisk representation av filsystemet: den vertikala axeln motsvarar uppsättningen namn, den horisontella axeln motsvarar uppsättningen av revisioner.
FilnamnNamnet på ett filsystemobjekt i Subversion bildas enligt samma regler som i UNIX-liknande operativsystem: det finns bara en rotkatalog, sökvägselement separeras med ett snedstreck ("/"). Filsystemobjekt är filer och kataloger (liksom symboliska länkar , som emuleras från vanliga filer genom att ställa in attributet svn:special).
RevisionsnummerRevisionsnumret i Subversion är ett naturligt tal (eller 0 för den allra första revisionen) som adresserar tillståndsnumret för förvaret i takt med att data den innehåller ändras. Varje framgångsrik commit genererar exakt en ny revision av förvaret, så den N: te revisionen är tillståndet för förvaret efter N: te commit.
I Subversion karaktäriserar en revision inte tillståndet för en enskild fil, utan för hela förvaret som helhet. Till exempel är revision 32 (prickad i figuren) tillståndet för fyra filer och två kataloger som fanns i förvaret vid den tiden.
Revisionsnumret är analogt med tiden i den meningen att lägre revisionsnummer motsvarar tidigare tillstånd i förvaret och högre revisionsnummer motsvarar senare.
Revisionsnumret kan ses som ett slags tidsstämpel i förvarets historia. Dessutom har varje revisionsnummer ett absolut värde kopplat till den tidpunkt då revisionen gjordes ( property svn:date ). Det är dock bekvämare att ange revisionsnumret än att ange tiden, eftersom det inte finns någon förväxling med tidszoner, numret är kortare och revisionsnumret kan inte ändras.
Drifts- och kärnrevisionerRevisionsnumret används i två olika sammanhang :
En revision kallas operationell om den anger revisionen eller omfattningen av revisioner som åtgärden ska tillämpas på , till exempel:
svn log -r 199:230 http://some.pathI det här exemplet körs kommandot svn logför en rad revisioner 199:230, vilket är intervallet för onlinerevisioner.
Men att endast specificera filnamnet och onlinerevision kan ibland på ett tvetydigt sätt peka på förvarsobjekten. Till exempel, i den situation som visas i fig. 2, det finns en tvetydighet när du kör följande kommando:
svn log -r 29:33 http://some.path/bar.txtKommandot specificerar ett antal onlinerevisioner ( 29:33), men de områden som är markerade i blått och grönt i figuren kan likaså betraktas som historiken för filen /bar.txti revisionsintervallet 29:33. I sådana fall är det också nödvändigt att specificera pivotrevisionen för att lösa tvetydigheten. Kärnrevisionen är revisionsnumret som anges utöver URL :en för filsystemobjektet (med " URL@ревизия"-notationen). Namnet kommer från det engelska ordet peg , som kan översättas med "stav" eller "peg". Pivotrevisionen markerar kedjan av tillstånd som det angivna paret tillhör URL@ревизияoch identifierar därmed unikt arkivobjektet som kommandot ska tillämpas på. I exemplet nedan kommer det första kommandot att skriva ut berättelsen markerad i blått i figuren, och det andra kommandot kommer att skriva ut berättelsen markerad i grönt:
svn log -r 29:33 http://some.path/file.txt@32 svn log -r 29:33 http://some.path/bar.txt@34Det senaste tillståndet för föremålet av intresse bör anges som kärnrevisionen. Anledningen till detta är att delstatskedjan är unikt spårad "bakåt" men inte "framåt". Till exempel, URL:en med pivotversionen http://some.path/foo.txt@31 tillhör två tillståndskedjor (markerade i grönt respektive grått). Av dessa två kedjor adresserar den angivna URL:en den grå kedjan, det vill säga när man går "framåt" från kärnrevisionen ignoreras kopieringsoperationer.
Operationer på filsystemetFöljande operationer kan utföras på filsystemobjekt i Subversion-förvaret [42] (se figur 1). Hakparenteserna indikerar det korta namnet på operationen i kommandots notation svn status.
En arbetskopia är en lokal kopia av en bit data från arkivet som skapats av Subversion-klientprogrammet som innehåller, förutom själva datan, viss tjänstinformation (dolda kataloger med namnet .svn). Serviceinformationen är nödvändig för att arbetskopian ska fungera korrekt; ingenting kan ändras i tjänstens data. Den minsta dataenheten som kan hämtas från ett arkiv som en arbetskopia är en katalog. Innehållet i en katalog kanske inte är helt extraherat: till exempel kan enskilda filer eller underkataloger uteslutas. Det är dock inte möjligt att checka ut en enda fil från valvet som en arbetskopia.
Varje underkatalog av en Subversion 1.6 och tidigare arbetskopior är också en fullständig arbetskopia, eftersom varje katalog innehåller sina hushållsdata (kataloger .svn). Sedan version 1.7 har varje arbetskopia endast en katalog .svni roten av sin katalog.
Arbetskopian är fristående i den meningen att Subversion inte lagrar någon data relaterad till arbetskopian utanför den. Med en arbetskopia kan du därför göra flera kopior till genom enkel kopiering utan att spendera nätverkstrafik.
I tjänstekatalogerna för arbetskopian lagras bland annat den så kallade rena kopian ( eng. pristine copy ) - arbetskopians filer i oförändrad form, eftersom de extraherades från förvaret (för svn är detta en revision som heter BASE). Med en ren kopia kan du snabbt se och återställa lokala ändringar utan att behöva komma åt förvaret. Storleken på arbetskopian på disken är dock ungefär dubbelt så stor (data + ren kopia av data) som storleken på själva datan. Detta tillvägagångssätt beror på det faktum att diskresurser är billigare och mer tillgängliga än datanätverksresurser .
Vanligtvis är att skapa en arbetskopia det första och nödvändiga steget för att genomföra lokala ändringar, eftersom endast ändringar som görs i arbetskopian kan överföras till förvaret. Undantaget är operationer som kan utföras direkt på valvet utan att skapa en arbetskopia.
TransaktionerLagring i Subversion är organiserat i form av transaktioner med atomicitets- och isoleringsegenskaper från ACID- egenskapsuppsättningen . Således garanterar versionskontrollsystemet integriteten, konsistensen och tillgängligheten för förvaret när som helst.
Dessa egenskaper är inte garanterade för en Subversion- arbetskopia - till skillnad från ett arkiv kan det vara i ett mellanliggande eller låst tillstånd om det kraschar eller avbryts (det vill säga, det kommer att behöva återställas av ett kommando svn cleanupeller återskapas innan du fortsätter).
Lokala och fjärrkommandoformulärAlla Subversion-klientkommandon kan delas in i följande grupper:
Formellt sätter Subversion inga restriktioner på projektets filstruktur – det kan vara vad som helst inom ramen för reglerna för namngivning av objekt i filsystemet. Det finns dock riktlinjer för att göra det lättare att arbeta med grenar och taggar. I det enklaste fallet rekommenderas det att skapa minst tre underkataloger i förvarets rotkatalog:
/. trunk branches tagsHela filstrukturen för projektet (huvudutvecklingsraden) måste finnas i underkatalogen trunk, underkatalogen branchesmåste innehålla projektets grenar ochtags taggarna . Till exempel följande förvarskatalogstruktur:
/. trunk branches branch_1 tags tag_1 tag_2
antar att projektet ( trunk) har en gren " branch_1" och två etiketter " tag_1" och " tag_2". Var och en av dessa kataloger ( trunk, branch_1, tag_1och tag_2) innehåller en kopia av motsvarande version av projektet.
Om det finns flera (under)projekt i arkivet skapas följande underkatalogstruktur för varje (under)projekt:
/. project1 trunk branches tags project2 trunk branches tagsDet vill säga, rotkatalogen innehåller projektkataloger, och var och en av dem har sina egna trunk, branches, tags, relaterade endast till detta projekt. De beskrivna lagringskatalogstrukturerna är endast exempel, i praktiken kan lagringen organiseras på ett sätt som är bäst lämpat för ett givet särskilt fall. [43] [44]
Ett annat sätt att lagra flera projekt är att skapa flera arkiv. Projekt som inte är relaterade på något sätt bör placeras i olika arkiv, eftersom kopierings-, flytt- och sammanslagningsoperationer inte kan utföras mellan arkiv. Flera arkiv kan slås samman till ett, om det behövs, med historiken för revisioner bevarad (genom att importera med kommandot svnadmin loadmed parametern --parent-dir).
FilialerSubversion använder en "fil"-modell (samma som Perforce [45] ) för att implementera grenar och taggar, dvs en gren är bara en katalog (du kan också göra en gren från en enda fil istället för en katalog). En ny gren skapas av kommandot svn copy. En filial kan skapas i vilken förvarskatalog som helst, men det är vettigt att följa konventionerna som beskrivs ovan om var man skapar nya filialer. För mer information om filialer, se Förgrening och sammanslagning .
TaggarAtt skapa en etikett görs också med kommandot svn copy, det vill säga det är tekniskt sett samma sak som att skapa en gren. Den enda skillnaden ligger i användningsmetoden: det antas att ingen kommer att ändra data i etiketten (begå ändringar av den). Till exempel, i fig. 1 tagg skapad i version 29: katalog /trunkfrån version 27 kopierad under namnet /tags/R1. Nu, om du inte ändrar data i katalogen /tags/R1, kommer det för alltid att förbli en exakt kopia av katalogen /trunk@27, det vill säga det kommer att vara en etikett .
Konceptet med taggar som används i Subversion skiljer sig från konceptet med taggar i andra versionskontrollsystem. En etikett är vanligtvis ett symboliskt namn som adresserar en uppsättning filer och deras tillstånd. I Subversion kopierar en etikett en uppsättning filer och deras tillstånd. Kopieringsetiketter i Subversion har sina fördelar och nackdelar.
Fördelar:
Brister:
En av de viktiga funktionerna i Subversion är stödet för egenskaper, det vill säga namn = värde textpar , som kan ställas in på objekt i butiken. Egenskaper används i två olika sammanhang: för filsystemobjekt och för revisioner.
Egenskaper för filsystemobjektVarje fil eller katalog i ett valv kan tilldelas en uppsättning egenskaper. Egenskapsändringar lagras i historiken på samma sätt som ändringar i filsystemet. Användare kan ställa in egenskaper med vilket namn som helst; det finns också en fördefinierad uppsättning verktygsegenskaper som används av Subversion-klientprogrammet (namnen på verktygsegenskapen har prefixet "svn: ").
Filegenskaper svn:executable Gör filen körbar (för arbetskopior under operativsystem i UNIX- familjen ). svn:mime-type Lagrar filens MIME -typ. Påverkar hur kommandon som visar filskillnader och sammanslagningsändringar (sammanslagning) fungerar. svn:keywords Lista över nyckelord ( eng. nyckelord ), som kommer att ersättas i filen med motsvarande värden. För att ersättningen ska ske måste nyckelordet finnas i filen som en $keyword$. Används för att automatiskt uppdatera värden i en fil som ändras från version till version (till exempel versionsnumret). svn:eol-style Anger regeln för konvertering av radsluttecken ( EOL ) i en textfil . Används i de fall där filen måste ha en specifik EOL-teckentyp. Vanligtvis används "native" - i det här fallet motsvarar typen av radsluttecken den som används i operativsystemet där arbetskopian skapas. svn:needs-lock Indikerar att filen kommer att vara skrivskyddad när den hämtas från lagringen. Denna egenskap är avsedd att användas tillsammans med blockeringsmekanismen . Att neka skrivning till en fil är en påminnelse om att skaffa ett lås på filen innan du redigerar den: när ett lås förvärvas gör Subversion-klientprogrammet automatiskt filen skrivbar (om du släpper låset igen gör filen omöjlig att ändra). Lås kan användas utan att ställa in den här egenskapen. Detta rekommenderas dock inte, eftersom det finns en risk att en annan användare kan börja redigera den låsta filen, och detta upptäcks först när ändringarna är genomförda. svn:special Egenskapen är inte avsedd att ställas in eller ändras av användare. Används för närvarande för att lagra symboliska länkar i arkivet. När en symbolisk länk läggs till ett arkiv skapas en fil i arkivet med svn:special. När den här filen är utcheckad på ett UNIX -liknande system, konverterar Subversion-klientprogrammet den tillbaka till en länk. svn:mergeinfo Lagrar information om vilka sökvägar som slogs samman till den här filen. Egenskapen introducerades i version 1.5, den används för sammanslagningsspårning . Det är en uppsättning strängar av formen filnamn: revisionsintervall . Här är filnamnet det fullständiga (med sökvägen från roten till förvarets filsystem) namn på filen eller katalogen från vilken det angivna intervallet av revisioner slogs samman. Rader uppdateras automatiskt under sammanslagningsoperationer; vid efterföljande sammanslagningar tar Subversion hänsyn till tidigare tillagda rader, och undviker därigenom upprepad sammanslagning av samma ändringar. Det rekommenderas inte att ändra egenskapen manuellt - detta kan bryta sammanslagningsspårningsmekanismen.svn:mergeinfo Katalogegenskaper svn:ignore En lista över fil- och katalognamnsmönster som Subversion-klientprogrammet kommer att ignorera i den här katalogen. Den här egenskapen liknar en fil .cvsignorei CVS . Egenskapen är som regel konfigurerad på ett sådant sätt att klientprogrammet "inte ser" filer och kataloger som skapas automatiskt av olika program och inte bör versionsföras (till exempel objektfiler , temporära filer etc.). Den här egenskapen gäller inte underkataloger. svn:externals Låter dig automatiskt extrahera en uppsättning kataloger till en arbetskopia genom att ange deras URL (du kan till och med från ett annat arkiv). svn:mergeinfo Samma som för filer . RevisionsegenskaperDen andra typen av objekt som det finns egenskaper för är själva revisionerna. I det här fallet kan egenskapsnamnen också vara vad som helst; vissa egenskaper med prefixet "svn: " har en speciell betydelse. Skillnaden mellan egenskaperna för revisioner och egenskaperna för filsystemobjekt är att för de förstnämnda är konceptet versionshistorik inte tillämpligt (eftersom ett specifikt egenskapsvärde tilldelas en revision). Med andra ord kan revisionsegenskaper ändras, men det gamla värdet går förlorat. Som standard är ändringar av revisionsegenskaper inaktiverade; för att tillåta administratören att skapa ett skript ( eng. hook ) som hanterar händelsen pre-revprop-change.
svn:date Datum och tid då revisionen skapades. svn:author Namnet på användaren som utförde ändringarna som ingår i denna version. svn:log En beskrivning av ändringarna som genomförts i denna version (texten som användaren skrev in när ändringarna genomfördes).Som regel ändras revisionsegenskaper endast av förvarsadministratören för att korrigera felaktiga data. Om användaren till exempel glömde att ange en textbeskrivning när han utförde sina ändringar, kan administratören skapa denna beskrivning genom att redigera svn:log.
En typisk arbetsflödesiteration med Subversion inkluderar följande steg.
Förgrening är en viktig aspekt av hur versionskontrollsystem fungerar eftersom typiska versionstekniker [47] (åtminstone inom mjukvaruutveckling ) involverar användning av grenar. Subversion har ganska avancerade förgrenings- och sammanslagningsmöjligheter (dock stöder den inte sammanslagning av omdöpta filer och kataloger).
På fig. Figur 3 visar konventionellt ett exempel på utvecklingen av grenar i förvaret. Den gröna färgen visar huvudlinjen för projektutveckling ( eng. mainline, trunk ), gul - grenar, blå - taggar, magenta - en gren vars utveckling har avbrutits. Röda pilar visar sammanslagningsändringar.
Skapa grenarEn ny gren (liksom en tagg ) skapas av kommandot svn copy, som skapar en kopia i förvaret med arv av källans revisionshistorik ( A+ operation ). Du bör alltid använda "fjärr"-formen för kommandot för att skapa grenar svn copy, till exempel:
svn copy http://.../trunk/dir http://.../branches/branch_name -m "Skapa en gren av dir"Den resulterande kopian blir en gren (eller en tagg, beroende på hur du arbetar med den). I framtiden kan ändringar som görs på en gren göras till källan från vilken denna gren skapades, sådan spridning av ändringar kallas en sammanslagning .
Kopieringsoperationer i Subversion är billiga ( eng. cheap copy ), det vill säga de kräver en liten fast mängd tid och diskutrymme. Lagringen är utformad på ett sådant sätt [48] att data inte dupliceras under all kopiering, utan en länk till källan skapas (liknande en hård länk ), dock är denna mekanism rent intern - från användarens håll. synen är det skapandet av en kopia som sker. Tack vare förgreningens höga effektivitet kan förgreningar skapas så ofta som behövs (men sammanslagning - ett nödvändigt tillägg till förgrening - är långsammare i Subversion än i andra moderna versionskontrollsystem).
Arbeta med grenarI allmänhet skiljer sig arbetet på en gren inte från att arbeta på huvudutvecklingslinjen ( stam ). Specifika kommandon krävs endast för aktiviteter som involverar mer än en gren. Dessa kommandon inkluderar (utöver kommandot create branch svn copy):
Som regel inkluderar hela cykeln för att arbeta med grenar följande steg:
En sammanslagning i Subversion är applikationen till en gren av en uppsättning ändringar som gjorts på en annan (eller samma) gren. För att implementera en sammanslagning måste du använda ett kommando svn merge - det tillämpar en uppsättning ändringar på en arbetskopia; sedan måste du genomföra ändringarna ( svn commit).
Att slå samman terminologi är något förvirrande. Termen sammanslagning är inte helt korrekt, eftersom det inte finns någon sammanslagning av grenar som sådan . Dessutom bör du inte sätta likhetstecken mellan sammanfogningen och kommandot svn merge: för det första, för sammanslagningen måste du utföra (utöver svn merge) konfliktlösning och begå, och för det andra är applikationen svn mergeinte begränsad till sammanslagning.
Andra användningar av kommandot svn mergeKommandot svn mergekan användas för mer än att bara slå samman. Faktum är att kommandot gör ändringar i arbetskopian lika med skillnaden mellan två kataloger eller filer i arkivet , därför svn mergeär det ett universellt verktyg för att överföra ändringar. Här är några exempel på hur man använder kommandot svn merge:
Kommandot används för att skapa ett valv svnadmin create. Denna operation skapar en tom butik i den angivna katalogen.
Nedan är en jämförelse av parametrarna för Subversion- och CVS-systemen, eftersom Subversion är positionerad just som en förbättring av CVS. En jämförelse görs endast för de parametrar där dessa system skiljer sig åt. Sammantaget överträffar Subversion CVS på alla sätt utom för etiketter i konventionell mening (det vill säga etiketter som adresserar filsystemobjekt).
Parameter | omstörtning | CVS |
---|---|---|
Förmågor | ||
Kataloger | Spårar versioner inte bara av filer utan också av kataloger. | Katalogversioner spåras inte, det vill säga katalogstrukturen är densamma (den som finns i arkivet för tillfället) för alla revisioner och alla grenar. Om du ändrar katalogstrukturen får vi korrekta (gamla) versioner av filerna när vi extraherar de gamla tillstånden, men i fel (existerande vid utvinningstillfället) katalogstruktur. |
Transaktioner | Atomicitet av multi-fil commits. | Atomicitet är bara på nivån för enfils commits. I själva verket delas commits till flera filer upp i en sekvens av commits till enskilda filer. Om en sådan sekvens av commits avbryts, förblir några av filerna committerade, medan andra förblir oengagerade. |
Ändringar | Ändringsuppsättningar stöds . _ | Ändringsuppsättningar stöds inte. |
Ändringar av filnamn | Stöder kopiering, flyttning och byte av filer och kataloger utan att förlora ändringshistoriken. | När du kopierar, flyttar och byter namn på filer har filen med det nya namnet ingen historik, det vill säga kopplingen till det gamla namnet och dess versionshistorik försvinner helt. Samma sak för filer i en katalog när du ändrar dess namn [49] . |
egenskaper | Varje fil och katalog kan ha en godtycklig uppsättning egenskaper kopplade till sig, bestående av ett namn och ett värde. Egenskaper är också under versionskontroll. | Egenskaper stöds inte. |
Lås | Valfri fillåsning stöds (sedan version 1.2). | Lås stöds inte, men det finns en liknande mekanism som kallas spårning . |
grenar | Grenar ( gren , se ordlista ) implementeras i vägrymden. Detta innebär att för att skapa en filial kopieras katalogen (kopian blir filialen). Att skapa sådana kopior är en snabb och inte resurskrävande operation, eftersom data inte dupliceras , istället är en ny version fixad, som skiljer sig från den tidigare endast i platsen för filerna. | Grenarna implementeras i den "tredje dimensionen". Det betyder att en fil på en filial adresseras med tre parametrar: sökväg i filsystemet, revision (eller något annat sätt att ange versionen, t.ex. tid), filialnamn . |
Taggar | Det finns inga taggar ( tagg , se ordbok ) som sådana. Istället används en kataloghierarki - en separat katalog skapas för etiketten (liksom för grenen). En tagg är en gren som, enligt konvention, inga ytterligare ändringar görs. En etikett är en kopia av det märkta tillståndet för filer och kataloger. | Taggar stöds. Etiketten adresserar filernas märkta tillstånd. |
Effektivitet | ||
Utbyte mellan klient och server | Eventuella versionsuppdateringar mellan klienten och servern överför bara filskillnader, vilket avsevärt kan minska nätverkstrafiken. | Skillnader överförs från servern till klienten, och hela objektet överförs från klienten till servern. |
Binärer | Fungerar lika effektivt med både text och binära filer . | Att arbeta med binära filer är mindre effektivt: varje ny version lagras i förvaret i sin helhet. |
Skapa grenar och etiketter | Kräver en liten fast mängd tid och diskutrymme. | Tidskostnaderna är höga (beroende på antalet inblandade filer). Filial- och taggnamn lagras redundant (i alla inblandade filer). |
Overhead i arbetsexemplar | Arbetskopians servicekataloger lagrar en ren kopia. Därför går det snabbt att bläddra och återställa lokala ändringar (utan att gå till lagring), men storleken på arbetskopian på disken är ungefär dubbelt så stor som storleken på själva data. | En ren kopia lagras inte, storleken på arbetskopian är ungefär lika med storleken på datan. Som ett resultat kräver visnings- och återställningsoperationer för lokala ändringar åtkomst till arkivet och är långsamma. |
Minnesförbrukning på servern | Mindre [50] . | Mer. |
Det finns ett cvs2svn-program utformat för att konvertera ett CVS-förråd till ett färdigt Subversion-förråd (eller ett git -förråd ) eller till en textdump, som sedan kan importeras till förvaret med hjälp av svnadmin. Samtidigt sparar cvs2svn all information som finns i CVS-förrådet: grenar, taggar, ändringsbeskrivningar, författarnamn, commit-datum. Dessutom konverteras ändringar i olika filer som committerats tillsammans till en revision.
Skillnader i användning FilhanteringsskillnaderI CVS, flyttas (döpa om) och kopiera filer och kataloger genom att lägga till ett objekt igen med ett nytt namn och (vid flytta och byta namn) ta bort det gamla objektet. Med detta arbete skapas filer och kataloger i arkivet på nytt och förlorar sin historik över ändringar. Subversion måste använda kommandona flytta ( moveeller mv) och kopiera ( copy) för att utföra dessa operationer. Deras användning bevarar historiken för ändringar och låter dig undvika onödiga operationer (särskilt när du har att göra med kataloger eller till och med filsystemsgrenar).
Till skillnad från CVS, hanteras vissa arbetskopieringsoperationer (som att ta bort och flytta en fil) av Subversion själv. De beskrivna och andra skillnaderna när man arbetar med arbetskopior sammanfattas i följande tabell (operationen commit, där den behövs i båda fallen, utelämnas):
Drift | CVS | omstörtning | Anteckningar |
---|---|---|---|
Ta bort en fil | rm-fil cvs rm-fil |
svn rm file | filen behöver inte raderas manuellt först |
Ta bort filer med mask | rm * cvs rm fil1 fil2 ... |
svn rm * | filer behöver inte raderas manuellt i förväg, inget behov av att räkna upp alla filer |
Byt namn/flytta | mv fil1 fil2 cvs rm fil1 cvs lägg till fil2 |
svn mv file1 file2 | filen behöver inte flyttas manuellt, filhistoriken bevaras |
kopiering | cp fil1 fil2 cvs lägg till fil2 |
svn copy file1 file2 | filen behöver inte kopieras manuellt, filhistoriken bevaras (förklädd) |
Lägga till (skapa) en katalog | mkdir dir cvs add dir |
svn mkdir dir svn commit |
katalogen kan inte skapas manuellt efter att det är nödvändigt att lägga till katalogencommit |
Lägga till en katalog med filer | cvs add dir cd dir cvs add file1 file2 |
svn add dir | katalogen läggs till med de filer den innehåller |
Byta namn på en katalog med filer (inga underkataloger) |
mkdir dir2 cvs add dir2 mv dir1/* dir2 cvs rm dir1/file1 dir1/file2 ... cvs add dir2/* |
svn mv dir1 dir2 | inget behov av att skapa och lägga till kataloger inget behov av att manuellt flytta filer inget behov av att lista alla filer filhistorik sparas |
Byta namn på en gren av filsystemet (kataloger med filer och underkataloger) |
upprepa kommandon ovan för varje kapslingsnivå eller varje underkatalog [51] |
svn mv dir1 dir2 | se ovan beror inte på antalet nivåer och kataloger |
I Subversion är det inte nödvändigt att skapa taggar eller använda ett datum/tid för att adressera arkivets tillstånd, i enkla fall (till exempel för att få en version efter en viss commit), blir det lättare att ange det nödvändiga revisionsnumret .
Subversion är designad som en uppsättning bibliotek uppdelade i flera nivåer. Var och en av dem utför en specifik uppgift och låter utvecklare skapa sina egna verktyg, beroende på komplexiteten och uppgiften.
fs Den lägsta nivån; implementerar ett versionsformat filsystem som lagrar data. Repos Nivån av lagring implementerad på filsystemet. På den här nivån är många hjälpfunktioner implementerade, och den stöder även lansering av hanterare ( English hooks ), det vill säga skript som startas när en händelse inträffar. Tillsammans utgör Fs- och Repos-nivåerna filsystemets gränssnitt . mod_dav_svn Ger WebDAV / Delta-V- åtkomst via Apache 2. Ra Implementerar lagringsåtkomst (både lokalt och fjärrstyrt). Med utgångspunkt från denna nivå kan förvaret refereras med URL, dvs.Subversions standardklientverktyg, SVN, konfigureras av miljövariabler och INI-filer skapade i användarens hemkatalog i en underkatalog .subversion(platsen för konfigurationen på Windows-system, i filer eller registret, beror på systeminställningar). I konfigurationen cachar SVN även SSL-certifikat, inloggningar, lösenord etc. (såvida det inte är inaktiverat i konfigurationen) för åtkomst till Subversion-servrar.
Kataloginnehåll .subversion:
Subversion kanske inte alltid hanterar filbyten korrekt om innehållet i filen ändras samtidigt som namnbytet. Problem kan också uppstå om en fil som bytt namn i den lokala kopian ändras av någon annan i förvaret. Vissa av dessa problem är åtgärdade i version 1.5, men den här lösningen är ännu inte komplett. [53]
Branschsammanslagningar anses också vara en svag punkt för Subversion. Före version 1.5 måste alla sådana operationer spåras manuellt av användare med hjälp av detaljerade ändringsloggposter. Sedan version 1.5 har grundläggande stöd för automatisk sammanslagningsspårning införts, vilket utvecklarna planerar att förbättra i efterföljande utgåvor [54] . Subversion stöder för närvarande vanliga sammanslagningsscenarier ganska bra; i mer komplexa fall är problem möjliga. Det rekommenderas [55] att organisera arbetsflödet på ett sådant sätt att problematiska scenarier undviks. Sammanfogning av omdöpta filer och kataloger stöds inte.
Information som väl placerats i Subversion-förvaret förblir där för alltid: en fil kan raderas vid den aktuella versionen, men det är alltid möjligt att hämta en av de tidigare versionerna där filen fanns från förvaret. Även om det faktiskt är syftet med att använda versionskontrollsystem att behålla tidigare revisioner, är det ibland nödvändigt att helt ta bort information från ett arkiv som av misstag placerats där. Subversion tillhandahåller inte något naturligt sätt att göra detta [56] ; den enda möjligheten är att skapa en lagringsdump, bearbeta den med standardverktyget svndumpfilter och sedan återställa lagringen från dumpen. Det finns även tredjepartsprogram för att automatisera denna process, men i alla fall kräver den här operationen en tillfällig avstängning av åtkomst till lagringen och ingripande av en administratör med privilegier som är tillräckligt höga för att helt radera den gamla lagringen och ersätta den med en ny ett.
namn |
Beskrivning |
Språk |
DB |
Licens |
Hemsida |
Uppdatering |
Version |
ett verktyg baserat på Wiki-teknik |
Pytonorm |
SQLite, PostgreSQL, MySQL och MariaDB |
trac.edgewall.org Arkiverad 8 april 2013 på Wayback Machine |
21/06/2017 |
1.2.2 | ||
ytterligare felspårning |
rubin |
MySQL, PostgreSQL, SQLite, Oracle. |
redmine.org Arkiverad 27 april 2011 på Wayback Machine |
09.12.2018 |
4.0.0 | ||
verktyg för att skapa och hantera åtkomst till arkiv, specialiserat för SVN |
PHP |
MySQL, SQLlite |
CeCill (GPL-kompatibel licens). |
www.usvn.info Arkiverad 12 maj 2011 på Wayback Machine |
2012-01-13 |
1.0.6 | |
ViewVC |
utan användarhantering, kräver inte DAV-stöd av webbservern. |
Pytonorm |
MySQL |
Tvåklausul i Berkeley-stil |
www.viewvc.org Arkiverad 4 maj 2011 på Wayback Machine |
2010-12-02 |
1.1.8 |
WebSVN |
webbläsargränssnitt till SVN |
PHP |
XML |
websvn.tigris.org Arkiverad 12 juni 2006 på Wayback Machine |
2010-12-10 |
2.3.2 | |
verktyg för att hantera förråd (skapa, ta bort, ladda och ta bort, hantera användare och grupper) |
PHP |
MySQL eller SQLite |
svnmanager.sourceforge.net Arkiverad 30 april 2011 på Wayback Machine |
2012-01-28 |
1.09 | ||
Submin (MIT) |
verktyg för att hantera arkiv och användare, inklusive hantering av åtkomstkontroll för enskilda kataloger i ett arkiv |
Pytonorm |
MIT/X Arkiverad 6 juni 2011 på Wayback Machine |
24.12.2012 |
2.1 | ||
cSvn |
webbgränssnitt för visning av Subversion-förråd |
C |
csvn.radix.pro Arkiverad 16 mars 2022 på Wayback Machine |
11/17/2020 |
0.1.3 |
Versionskontrollsystem ( kategori ) | |
---|---|
Endast lokalt | |
Klient-server | |
Distribuerad | |
URI- scheman | |
---|---|
Officiell | |
inofficiell |