svnAan de slag met svn


Opmerkingen

Apache Subversion (SVN) is een universeel en gecentraliseerd open source versiebeheersysteem. Subversion is momenteel een project onder Apache Software Foundation (ASF) en heeft een licentie onder de Apache-licentie, versie 2.0 .

Subversion is ontworpen voor het beheren en besturen van bestanden en mappen en het bijhouden van wijzigingen die daarin zijn aangebracht; het fungeert als een betrouwbare tijdmachine en managementtool voor de samen ontwikkelde projecten. Het kan eenvoudig de standaardvragen beantwoorden die elk versiebeheersysteem betrouwbaar moet beantwoorden. Bijvoorbeeld,

  • Hoe zag het project / bestand FOO eruit op 12/12/2012?
  • Welke wijzigingen zijn door USERNAME of op 20/12/2012 doorgevoerd?
  • Wie heeft de specifieke reeks gewijzigd sinds de laatste beoordeling?
  • en veel veel meer.

versies

Versie Wat is er nieuw? Publicatiedatum
1.9.x Talloze gebruiksvriendelijkheid en prestatieverbeteringen 2015/08/05
1.8.x Verbeterde tracking hernoemen, automatische re-integratie samenvoegingen, geërfde versie-eigenschappen, ingebouwde tool voor conflictoplossing 2013/06/18
1.7.x Volledige herschrijving van de werkkopiebibliotheek, verbeterd HTTP-protocolgebruik 2011-10-11
1.6.x Identificatie van boomconflicten, verbeterde interactieve conflictoplossing, repo-relatieve URL's ondersteunen 2009-03-20
1.5.x Merge en branch tracking ( svn:mergeinfo ), interactieve bestandsconflictoplossing, schaarse kassa's, verbeterde svn:externals syntaxis 2008-06-19
1.4.x svnsync tool voor repository replicatie, nieuwe en verbeterde werkkopie bibliotheek 2006-09-10
1.3.x Logging op hoog niveau van gebruikershandelingen aan de serverzijde, prestatieverbeteringen 2005-12-30
1.2.x Ondersteuning voor model voor vergrendelen, wijzigen en ontgrendelen (dwz vergrendelen), DAV-autoversioning en FSFS wordt standaard gebruikt voor nieuwe opslagplaatsen 2005/05/21
1.1.x Nieuwe repository backend (FSFS), versiebeheer van symlink 2004-09-29
1.0.x Eerste publieke release 2004-02-23

Apache Subversion 1.9.x is momenteel de nieuwste en beste SVN-release die volledig wordt ondersteund. Subversion 1.8.x wordt gedeeltelijk ondersteund. Subversion 1.7.x en eerdere versies worden niet langer ondersteund.

Installatie en eerste installatie

Installeer de svn client om samen te werken aan het project dat Subversion gebruikt als versiebeheersysteem.

Om Subversion te installeren, kunt u het zelf bouwen vanuit een broncodeversie of een vooraf gebouwd binair pakket downloaden voor uw besturingssysteem. De lijst met sites waar u een gecompileerde Subversion-client ( svn ) voor verschillende besturingssystemen kunt verkrijgen, is beschikbaar op de officiële pagina met binaire pakketten . Als je de software voor jezelf wilt compileren, pak dan de bron op de pagina Broncode .

Met Subversion bent u niet beperkt tot het gebruik van alleen de standaard svn -opdrachtregelclient. Er zijn enkele opvallende grafische Subversion-clients voor verschillende besturingssystemen en de meeste IDE's bieden tegenwoordig een robuuste integratie met SVN direct uit de doos of via plug-ins. Raadpleeg de Wikipedia-pagina voor de lijst met grafische clients: https://en.wikipedia.org/wiki/Comparison_of_Subversion_clients .

Direct nadat u de client hebt geïnstalleerd, moet u deze kunnen uitvoeren door de opdracht svn . Je zou het volgende moeten zien:

$ svn
Type 'svn help' for usage.
 

Alles is grotendeels klaar. Nu moet u een lokale werkruimte maken, een werkkopie genaamd, die wordt verbonden met de externe centrale opslagplaats . Met andere woorden, u gaat een werkkopie afrekenen . U gaat met de bijgewerkte gegevens werken met behulp van de werkkopie en kunt uw wijzigingen publiceren ( committing genaamd in SVN) zodat anderen die aan hetzelfde project werken ze kunnen zien en van uw wijzigingen kunnen profiteren. Als u later de toekomstige wijzigingen van anderen uit de repository wilt ophalen, zou u uw werkkopie bijwerken . Deze basisbewerkingen worden behandeld in andere voorbeelden.

Een werkkopie uitchecken

Om wijzigingen aan te brengen in de gegevens van het project, moet u een lokale kopie van het versie-project verkrijgen. Gebruik de opdrachtregel svn client of uw favoriete SVN-client (bijvoorbeeld TortoiseSVN). Uw lokale kopie van het project wordt een werkkopie genoemd in Subversion en u krijgt deze door de opdracht svn checkout <URL> waarbij <URL> een repository-URL is. bv

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Als alternatief kunt u svn co <URL> als afkorting om een lokale kopie af te rekenen.

Als resultaat krijgt u een werkkopie van de /trunk van een project met de naam MyProject dat zich in MyRepo-repository bevindt. De werkkopie bevindt zich in een map met de naam trunk op uw computer ten opzichte van de map waarin u de opdracht hebt gegeven.

Als u een andere naam voor uw werkkopie wilt, kunt u die als parameter aan het einde van de opdracht toevoegen. bv

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk MyProjectSource
 

Hiermee maakt u een werkkopie met de naam MyProjectSource .

Merk op dat in plaats van het controleren van de trunk, je een branch, private plank of een tag zou kunnen bekijken (ervan uitgaande dat ze al in de repository bestaan); u kunt een onbeperkt aantal lokale werkkopieën op uw machine hebben.

Je zou ook de werkkopie van de hele repository MyRepo kunnen krijgen. Maar u moet hiervan afzien. Over het algemeen heb je niet nodig om een werkend exemplaar van de gehele repository voor uw werk, omdat je werk kopie kan direct worden overgeschakeld naar een andere ontwikkeling tak / label / whatever. Bovendien kan Subversion repository een aantal (niet) gerelateerde projecten bevatten en het is beter om voor elk project een werkkopie te hebben, geen werkkopie voor alle projecten.

Een werkkopie uitchecken bij een specifieke revisie

Om versie 5394 te krijgen, gebruik:

svn co --revision r5394 https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Of de kortere versie:

svn co -r 5394 https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Of door gekoppelde revisies te gebruiken:

svn co https://svn.example.com/svn/MyRepo/MyProject/trunk@5394
 

Als u al bent uitgecheckt, kunt u de update opdracht gebruiken om a naar een bepaalde revisie te verplaatsen, door het volgende te doen:

svn up -rXXX
 

Uw lokale wijzigingen doorvoeren in de repository

Voer de opdracht svn commit om de wijzigingen die u in uw werkkopie hebt aangebracht te publiceren.

BELANGRIJK: Controleer uw wijzigingen voordat u ze vastlegt! Gebruik svn status en svn diff om de wijzigingen te bekijken. Zorg er ook voor dat je op het juiste pad bent voordat je een commit uitvoert. Als u veel bestanden in verschillende mappen hebt bijgewerkt, moet u op het juiste niveau zijn om ze allemaal onder uw locatie op te nemen.

Hier is een voorbeeld van het commando commit:

svn commit -m "My Descriptive Log Message"
 

Als alternatief is svn ci de afkorting voor svn commit

Let op de optie -m (--message) . Goede commit-berichten helpen anderen te begrijpen waarom een commit is gedaan. Aan de serverzijde is het ook mogelijk om niet-lege berichten af te dwingen , en zelfs af te dwingen dat elk vastleggingsbericht een bestaand ticket vermeldt in uw bugtrackingsysteem.

Patches maken en toepassen

Een patch is een bestand dat de verschillen toont tussen twee revisies of tussen uw lokale repository en de laatste revisie waarnaar uw repository verwijst.

Ga als volgt te werk om een patch van uw lokale niet-vastgelegde wijzigingen te delen of op te slaan voor peer review of om later toe te passen:

svn diff > new-feature.patch
 

Om een patch te krijgen van de verschillen tussen twee revisies:

svn diff -r NEWER_REVISION:OLDER_REVISION > feature.patch
 

Voer het volgende uit om een patch toe te passen:

svn patch new-feature.patch
 

Om de patch met succes toe te passen, moet u de opdracht uitvoeren vanaf hetzelfde pad als waar de patch is gemaakt.

De versiegegevens exporteren (gewone download)

Als u de gegevens van het versieproject wilt ophalen, maar u geen van de versiebeheermogelijkheden van Subversion nodig hebt, kunt u de opdracht svn export <URL> uitvoeren. Hier is een voorbeeld:

$ svn export https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Als resultaat krijgt u de gegevensexport van het project, maar in tegenstelling tot een werkkopie kunt u er geen svn opdrachten op uitvoeren. De export is slechts een eenvoudige download van de gegevens.

Als u enige tijd later de gedownloade gegevens wilt converteren naar een volledig functionele werkkopie, voert u svn checkout <URL> naar de map waarnaar u de export hebt uitgevoerd.

Wijzigingen aanbrengen in uw lokale werkkopie

De werkkopie (WC) is uw lokale en privé-werkruimte die u gebruikt om te communiceren met de centrale Subversion-repository. U gebruikt de werkkopie om de inhoud van uw project te wijzigen en wijzigingen door anderen op te halen.

De werkkopie bevat de gegevens van uw project en ziet eruit en werkt als een gewone map op uw lokale bestandssysteem, maar met één groot verschil - de werkkopie volgt de status en wijzigingen van bestanden en mappen binnen. Je kunt de werkkopie zien als een gewone map met een .svn toegevoegd door een verborgen .svn metadatamap in de hoofdmap.

Meestal gaat u wijzigingen in de projectgegevens aanbrengen door de inhoud van de werkkopie aan te passen. Zodra u tevreden bent met de wijzigingen en u deze grondig hebt gecontroleerd, bent u klaar om ze te publiceren in de centrale repository.

U kunt alle acties uitvoeren met de gegevens van uw project in de werkkopie, maar bewerkingen waarbij kopiëren, verplaatsen, hernoemen en verwijderen nodig zijn, moeten worden uitgevoerd met de overeenkomstige svn opdrachten:

  • Bestaande bestanden wijzigen . Wijzig de bestanden zoals gewoonlijk met uw favoriete tekstverwerker, grafische editor, software voor het bewerken van audio, IDE, enz. Zodra u de wijzigingen op schijf opslaat, herkent Subversion ze automatisch.

  • Nieuwe bestanden toevoegen . Zet nieuwe bestanden in de werkkopie en Subversion herkent ze als niet- omgekeerd . Het zal niet automatisch beginnen met het volgen van de nieuwe bestanden, tenzij u de opdracht svn add uitvoert:

    svn add foo.cs
     
  • Bestanden en mappen verplaatsen . Bestanden en mappen svn move opdracht svn move :

    svn move foo.cs bar.cs
     
  • Bestanden en mappen hernoemen . Hernoem bestanden en mappen met svn rename opdracht svn rename :

    svn rename foo.cs bar.cs
     

    OPMERKING: svn rename commando svn rename is een alias van het svn move commando svn move .

  • Bestanden en mappen kopiëren . Kopieer bestanden en mappen met de opdracht svn copy :

    svn copy foo.cs bar.cs
     
  • Bestanden en mappen verwijderen . Verwijder bestanden en mappen met de opdracht svn delete :

    svn delete foo.cs
     
  • De status van bestanden en mappen in de werkkopie controleren . Controleer uw wijzigingen met de opdracht svn status (of kortweg svn st ):

    svn status
     

    BELANGRIJK: Controleer uw wijzigingen altijd voordat u ze doorvoert. Dit helpt u te voorkomen dat u onnodige of irrelevante wijzigingen aanbrengt.

  • Wijzigingen terugzetten . Zet je wijzigingen svn revert opdracht svn revert :

    svn revert foo.c
     
  • Alle wijzigingen ongedaan maken : vanuit de root van de repository:

    svn revert -R .
     

    BELANGRIJK: Teruggekeerde niet-vastgelegde wijzigingen zullen voor altijd verloren gaan. U kunt de teruggezette wijzigingen niet herstellen. Gebruik svn revert met voorzichtigheid! Als u de wijzigingen wilt behouden maar moet terugdraaien, slaat u ze op in een patch. Bekijk een voorbeeld van het maken en toepassen van een patch.

Een bestand terugdraaien of terugdraaien

Om een bestand te herstellen naar de nieuwste bijgewerkte SVN-versie, dwz de lokale wijzigingen ongedaan maken, kunt u revert :

svn revert file
 

Gebruik een update om een bestand naar een oudere versie (revisie XXX) te herstellen:

svn update -r XXX file
 

Waarschuwing : in beide gevallen verliest u lokale wijzigingen in het bestand omdat het wordt overschreven.


Gebruik cat om alleen de oudere versie van een bestand te bekijken:

svn cat -r XXX file
 

En om de verschillen met uw lokale versie van het bestand te bekijken:

svn diff -r XXX file
 

Herziening van de logboeken

Het uitvoeren van het svn log toont je alle commit-berichten, je wilt waarschijnlijk alleen bepaalde revisies bekijken.

  • Bekijk de n meest recente revisies:

    svn log -n

  • Bekijk een specifieke revisie:

    svn log -c rXXX

  • Bekijk de betrokken paden:

    svn log -v -c rXXX

Een werkkopie bijwerken

Je bent niet de enige die aan het project werkt, toch? Dit betekent dat uw collega's ook wijzigingen aanbrengen in de gegevens van het project. Om up-to-date te blijven en de door anderen gepleegde wijzigingen op te halen, moet u de svn update opdracht uitvoeren in uw werkkopie. Als gevolg hiervan wordt uw werkkopie gesynchroniseerd met de repository en worden de wijzigingen gedownload die door uw collega's zijn aangebracht.

Shorthand voor svn update is svn up .

Het is een regel om svn update voordat u uw wijzigingen doorvoert.

Een met een wachtwoord beveiligde opslagplaats gebruiken

Een Subversion-repository kan zo worden geconfigureerd dat bepaalde inhoud of opdrachten alleen toegankelijk zijn voor bepaalde gebruikers. Om toegang te krijgen tot deze beperkte inhoud, moet u een gebruikersnaam en wachtwoord opgeven.

Uw gebruikersnaam en wachtwoord kunnen rechtstreeks worden opgegeven als onderdeel van de opdracht:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser --password topsecret
 

Helaas zorgt dit ervoor dat uw wachtwoord in platte tekst op de console verschijnt. Om dit mogelijke beveiligingsprobleem te voorkomen, geeft u een gebruikersnaam op, maar geen wachtwoord. Als u dit doet, verschijnt er een wachtwoordprompt, zodat u uw wachtwoord kunt invoeren zonder dit te onthullen:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser
Password for 'JoeUser':
 

Als u helemaal geen verificatiegegevens opgeeft, wordt u door Subversion om zowel de gebruikersnaam als het wachtwoord gevraagd:

$ svn checkout https://svn.example.com/MyRepo/trunk
Username:  JoeUser
Password for 'JoeUser':
 

Hoewel de eerste methode minder veilig is, wordt deze vaak gezien in geautomatiseerde scripts, omdat het voor veel soorten scripts moeilijk is om informatie te verstrekken aan een interactieve prompt.

Opmerking : voor opdrachten die alleen op uw werkkopie werken (zoals revert of status ) is nooit een wachtwoord vereist, alleen voor opdrachten waarvoor communicatie met de repository-server nodig is.