CVS onder de knie krijgen met KDE's Cervisia
Originele auteur: Carlos Leonhard Woelz
Vertaling: Tom Verbreyt
Herziening 0.2
Licenties en verdiensten
Inhoudsoverzicht
- 1 Inleiding
- 2 Een lokale repository opzetten
- 3 De locatie van de repository opsporen en het ophalen van bestanden instellen
- 4 Checkout: broncode ophalen
- 5 De werkmap bijwerken
- 6 Uitvoer tijdens het bijwerken; de status van bestanden
- 7 Patches aanmaken, verschillen bekijken en patches toepassen in je werkmap
- 8 Conflicten oplossen
- 9 Committing: bestanden en mappen wijzigen, toevoegen en verwijderen
- 10 Besluit
- 11 Licenties en verdiensten
CVS is een hulpmiddel bij het beheren en verspreiden van verschillende versies van bestanden. Het helpt je om op de hoogte te blijven van de snel wijzigende stand van zaken. Anders gezegd: CVS is een versie-controlesysteem. Met CVS wordt samenwerking erg vergemakkelijkt, omdat alle betrokkenen tegelijkertijd aan lokale kopieën kunnen werken, zonder zich daarbij zorgen te moeten maken over de wijzigingen van de anderen. CVS maakt het mogelijk om versies uit het verleden terug op te diepen (handig voor het opsporen van bugs), om branches (vertakkingen) te creëren (handig voor experimentele ontwikkeling en voor releases) en nog veel meer.
1 Inleiding
Een CVS-"repository" bevat alle huidige bestanden. Alle betrokkenen hebben hun eigen, lokale kopie van die bestanden, in het Engels als working folder bestempeld. Je kan je wijzigingen toebrengen aan de CVS-repository (dat noem je in het Engels "committing") en/of je eigen kopie bijwerken om de wijzigingen van andere personen toe te brengen aan de documenten die je zelf bezit. Dit artikel beschrijft hoe je je CVS-repository efficiënt kan beheren met behulp van Cervisia, een handig front-end voor CVS.
Je kan ervoor zorgen dat de hoofd-repository je eigen project bevat, als je gebruik wil maken van de handige versie-controlefuncties van CVS. Een lokale repository opzetten is eenvoudig en maakt het mogelijk om
- ...snel terug te keren naar een vroegere versie
- ...problematische wijzigingen op te sporen
- ...onbedoeld informatieverlies te vermijden
- ...experimenteel met je werk te prutsen, terwijl je tegelijkertijd een meer conservatieve versie onderhoudt
- ...snel en eenvoudig de wijzingen van anderen te bekijken (en aan te passen)
Om de mogelijkheden van CVS optimaal te benutten, bewaar je best alle bestanden en documenten als tekstbestanden. Het merendeel van de functies die CVS je biedt, heeft immers te maken met het manipuleren van tekst. Het is dan ook logisch dat CVS vooral populair is in kringen van programmeurs en web-ontwikkelaars, omdat net daar hoofdzakelijk met tekstbestanden gewerkt wordt.
Het concept van versie-controle is echter even nuttig voor niet-programmeurs. Iedereen komt weleens in aanraking met opdrachten die samenwerking vereisen, zij het op het werk, aan de universiteit of eender waar. Ook complexe persoonlijke projecten kunnen baat hebben bij versie-controle. Tekstbestanden die in binair formaat opgeslagen zijn (bestanden die je aanmaakt met OpenOffice.org of KOffice zijn bijvoorbeeld gecomprimeerd), worden helaas ook als binaire bestanden behandeld. Zelfs tekst-documenten die opmaakinformatie bevatten, zoals .html-, .xml- en .rtf-bestanden, maken het gewone eindgebruikers moeilijk om de broncode van het document te bekijken. Hetzelfde geldt dan ook voor de wijzigingen die CVS toont.
In een volmaakte wereld zouden gebruikers ervoor kunnen kiezen enkel de inhoud te bekijken en niet de ruwe informatie die gepaard gaat met vele tekstbestanden en alle binaire bestanden. Zo'n toestand is echter afhankelijk van afzonderlijke applicaties, die dan immers met CVS in het achterhoofd geschreven zouden moeten zijn, opdat ze bestanden efficiënt zouden kunnen ontleden. Je kan je voorstellen dat dat geen eenvoudige taak is, afhankelijk van bestandtypes en applicaties. Laten we echter vooral niet afdwalen; dat probleem ligt buiten het bereik van dit artikel.
Het doel van deze korte handleiding ligt niet in het beschrijven van alle functies en commando's van CVS; de bedoeling is om de gebruiker te tonen hoe hij de meest gebruikelijke taken met CVS kan uitvoeren. Het zou bijvoorbeeld niet bijster nuttig zijn om alle CVS CLI-commando's van buiten te leren als je enkel wil meewerken aan de documentatie van een OSS-project. Hetzelfde geldt als je enkel de broncode van een programma wil downloaden of van een repository gebruik wil maken om samenwerkingsmogelijkheden te bieden in je bedrijf.
Cervisia is een front-end voor versie-controle. Cervisia is geschreven om CVS en andere versie-controleprogramma's te ondersteunen via één gemeenschappelijke bedieningsinterface. Op dit moment biedt Cervisia vele mogelijkheden, zoals het oplossen van conflicten, het aanschouwelijk maken van verschillen tussen bestanden en de geschiedenis van die bestanden en het bekijken van de status van bestanden in de werkmap. Voorts is er ondersteuning voor de meest gebruikte functies van CVS. Cervisia maakt deel uit van het pakket kdesdk. Onder Debian volstaat iets als apt-get install cervisia cvs om Cervisia te installeren. Raadpleeg de documentatie van jouw distributie als je er niet uit raakt. In dit artikel wordt gebruik gemaakt van CVS versie 2.1 en KDE 3.2.
In de omgang met een CVS-repository zijn dit de meest voorkomende handelingen:
- checkout: de gegevens van de repository kopiëren naar een lokale werkmap
- update: de laatste wijzigingen aan de repository toebrengen aan je lokale werkmap
- difference: een bestand creëren dat de verschillen tussen je werkmap en de repository bevat
- add: CVS duidelijk maken dat de aangegeven bestanden of mappen (die zich in je werkmap bevinden) bij het eerstvolgende commit-commando aan de repository moeten toegevoegd worden
- remove: CVS duidelijk maken dat de aangegeven bestanden of mappen bij het eerstvolgende commit-commando uit de repository verwijderd moeten worden
- commit: alle wijzigingen aan de lokale werkmap (wijzigingen, toevoegingen, verwijderingen) toepassen op de repository
De opties van Cervisia worden door de eigen configuratie bepaald, dus niet door het gebruikelijke bestand voor CVS-instellingen, ".cvsrc". Omdat de standaardinstellingen van Cervisia best zinvol zijn, hoeven we niets te configureren.
2 Een lokale repository opzetten (optioneel)
Als je lokaal werk wil verrichten dat ook maar een zekere graad van complexiteit in zich draagt, dan is het een goed idee om de mogelijkheden van CVS te benutten. Het aanmaken van een lokale repository is erg eenvoudig en er is weinig verschil tussen het werken met een lokale repository en het werken met een repository die je via een netwerk-protocol benadert: al je wijzigingen breng je aan in je werkmap en met een CVS-programma naar keuze werk je de stand van zaken bij en doe je aan committing alsof het via een netwerk ging. Om een lokale repository op te zetten in de persoonlijke map van gebruiker "bassie" en er een module voor je werk aan toe te voegen, bijvoorbeeld "bassie_adriaan_afl3", geef je hetvolgende in (in een terminal zoals Konsole):
mkdir /home/bassie/repository cvs -d /home/bassie/repository init mkdir /home/bassie/repository/bassie_adriaan_afl3
Fijn! Je hebt nu een lokale CVS-repository onder /home/bassie/repository.
3 De locatie van de repository opsporen en het ophalen van bestanden instellen
Er zijn meerdere manieren om een CVS-repository te benaderen. Het kan gaan om een lokale repository waartoe je toegang hebt via een paswoord (:pserver:), andere toegangsmogelijkheden zijn secure shell (:ext:) en kerberos-authentificatie (:kserver:) om er maar enkele te noemen. Deze handleiding beslaat lokale repositories en repositories die met een paswoord beveiligd zijn. Voor andere toegangsmethoden raadpleeg je best de documentatie van CVS. De opmaak van de locatie van een repository ziet er zo uit:
[:methode:][[gebruiker][:paswoord]@]computernaam[:[poortnummer]]/pad/naar/repository
Je hebt niet altijd al die informatie nodig (gebruiker, paswoord, computernaam, poortnummer). Als je bijvoorbeeld, zoals in het voorbeeld hierboven, een lokale CVS-repository opgezet hebt, dan is de naam van de repository eenvoudigweg het pad dat erheen leidt (in het voorbeeld dus /home/bassie/repository).
Het is gebruikelijk dat OSS-projecten anonieme toegang tot hun broncode via CVS voorzien. Zo kan je eenvoudig de meest recente broncode binnenhalen zonder eerst een CVS-account te moeten aanvragen. Anonieme CVS maakt gebruik van paswoorden. Wil je beginnen werken met een project dat op die manier toegang aanbiedt, dan zoek je best naar de details op de homepage van dat project.
We zullen zien dat je niet noodzakelijk een CVS-account nodig hebt om bij te dragen aan je favoriete project. Met anonieme CVS kan je je werkmap wijzigen, een bestand met wijzigingen aanmaken (een diff- of patch-bestand) en dat bestand naar het project verzenden. Zodra je rol binnen het project echter vaste vorm begint aan te nemen als artiest, schrijver van documentatie, vertaler, webmaster of eender wat, dan kan het zinvol worden om een CVS-account te vragen.
In wat volgt zullen we de hoofd-repository van KDE's anonieme CVS gebruiken in de voorbeelden. Vervang de voorbeelden vooral met de locatie die je gekozen hebt. Als dat een locatie is met pserver om bestanden op te halen, dan moet je inloggen met een gebruikersnaam en een paswoord. In het geval van anonieme CVS kan je gewoon de entertoets gebruiken als je om een paswoord wordt gevraagd. Dat alles is trouwens maar één keer per locatie nodig, omdat de CVS-paswoorden voor later gebruik opgeslagen worden in het bestand .cvspass in je persoonlijke map. Mocht je, tot slot, gebruik maken van een lokale repository, dan hoef je uiteraard niet eens in te loggen.
Cervisia kan meerdere locaties opslaan voor afzonderlijke repositories.
- Om een locatie van een repository toe te voegen kies je in het menu Repository voor Repositories....
- Je krijgt dan het dialoogvenster "Toegang tot repositories instellen".
- Klik op Toevoegen.... Het dialoogvenster "Repository toevoegen" komt tevoorschijn.
- Geef de locatie van de repository die je wil toevoegen op in het tekstvak, bijvoorbeeld /home/bassie/repository. Een ander voorbeeld is KDE's anonieme CVS-repository: :pserver:anonymous@anoncvs.kde.org:/home/kde.
- Als jouw repository pserver gebruikt, moet je natuurlijk nog inloggen. De Status-kolom toont daarom waarschijnlijk "niet ingelogd".
- Klik op de "Login..."-knop. Voor anonieme CVS druk je op enter, in andere gevallen geef je je paswoord in. Als alles goed verliep, zou je nu in de Status-kolom "Ingelogd" moeten zien staan.
- Voeg zoveel repositories toe als je wil...
4 Checkout: broncode ophalen
Eenmaal je de locatie van je repository opgegeven hebt, wordt het tijd om de informatie van die repository op te halen en er werkmappen mee te vullen. De hoofdmappen op een CVS-server noemen we modules. Cervisia haalt de lijst van modules voor je op. Soms heb je meer dan één module nodig om een bepaalde taak uit te voeren; in die gevallen zal je dus meerdere keren een checkout moeten doen. Ben je niet zeker welke modules je nodig hebt, vis dan eerst uit hoe het precies zit (via de webpagina's van het project in kwestie).
Verder zou je op voorhand de naam moeten weten van de branch die je nodig hebt. De standaardinstelling van Cervisia (en van CVS op de CLI) zorgt ervoor dat dat de hoofdbranch (de meest recente branch dus) uitgecheckt wordt. Die branch wordt meestal HEAD genoemd. De branch waarop je werkmap zich baseert noem je BASE; uiteraard kan BASE hetzelfde zijn als HEAD. De bedoeling van branches (vertakkingen) is dat een module op verschillende manieren ontwikkeld kan worden. Een mooi voorbeeld uit het werkelijke leven is de vrijgave van een software-project. Na een belangrijke release bevat de programmacode tal van bugs die opgelost moeten worden. Tegelijkertijd willen medewerkers natuurlijk nieuwe mogelijkheden toevoegen aan het programma, waardoor er weer nieuwe bugs de kop opsteken. CVS maakt het mogelijk om de ontwikkeling van het programma op te splitsen (ook wel forken genoemd): er wordt dan een extra branch aangemaakt voor de stabiele release. Bugfixes gaan vervolgens naar beide branches, nieuwe features enkel naar HEAD.
Om een module uit te checken ga je als volgt te werk:
- In het menu Repository kies je voor Checkout....
- Je krijgt dan het dialoogvenster "CVS checkout". Kies de gewenste locatie uit de dropdown-box.
- Klik op "Lijst ophalen" om de lijst van modules op te halen, of geef zelf de naam van de module in. Ben je op zoek naar een bepaalde map binnen de module, geef dan ook het juiste pad naar die map in. Je kan dus bijvoorbeeld de module voor "bassie_adriaan_afl3" van de lokale repository uit het voorbeeld ophalen, of de "arts"-module (de eerste module die je nodig hebt om KDE te compileren) van de anonieme CVS-server van KDE.
- Bij "Branch-tag" kan je de naam van de gewenste branch opgeven. Laat je het tekstvak leeg, dan wordt zoals reeds gezegd werd standaard de hoofdbranch (HEAD) uitgecheckt. De huidige stabiele branch van arts zou in dit voorbeeld dan weer "ARTS_1_2_STABLE" heten.
- Geef tot slot het pad op naar de werkmap waarin je de aangegeven module wil opslaan (gebruik de "..."-knop om dat via de klassieke bestandsdialoog te doen) en bevestig je keuzes.

Nadat je de module met succes uitgecheckt hebt, bevindt de locatie van de repository zich in je werkmap, zodat interactie tussen de werkmap en de repository in de toekomst wat vlotter zal verlopen. Je moet immers niet telkens opnieuw de locatie opgeven van een module die je al een keer uitgecheckt hebt.
5 De werkmap bijwerken
Zodra je in je werkmap een kopie van de inhoud van de repository hebt, zorgt het "update"-commando ervoor dat die kopie gesynchroniseerd wordt: de stukken die gewijzigd zijn worden dan lokaal bijgewerkt, zodat je kopie weer up-to-date is met de huidige stand van zaken in de repository.
Je kan je werkmap trouwens bijwerken naar eender welke branch, tag of datum, zelfs van een experimentele versie naar een stabiele. Stel bijvoorbeeld dat je een release candidate van KDE 3.2 aan het testen was tijdens een feature freeze (dus een tijdstip waarop geen nieuwe mogelijkheden meer geïntroduceerd werden), door gebruik te maken van de HEAD-branch. In januari 2004 werd de KDE_3_2_BRANCH gecreëerd, zodat HEAD weer opengesteld werd voor verdere ontwikkeling. Om KDE 3.2 verder te testen zou je in zo'n geval moeten updaten naar KDE_3_2_BRANCH, anders zou je immers aan de slag gaan met de ontwikkelingsversie van KDE. Op een later moment zou je hoe dan ook kunnen terugkeren naar de HEAD-branch -- daarin schuilt net de kracht van CVS!
Cervisia noemt je werkmap "sandbox". Om een module (je werkmap) bij te werken, volg je deze stappen:
- Kies in het menu Bestand voor Sandbox openen....
- Selecteer een werkmap (een module) in het dialoogvenster.
- Kies in het menu Bestand voor Bijwerken (of klik gewoon op de juiste knop in de knoppenbalk).
- Merk op dat Cervisia acties uit de menu's of uit de knoppenbalk enkel toepast op de bestanden en mappen die je geselecteerd hebt. Als je slechts één bestand selecteert, dan zal ook enkel dat ene bestand bijgewerkt worden. Klik je een map aan, dan zal de hele map bijgewerkt worden. In het menu Instellingen vind je trouwens de optie Recursief een update uitvoeren. Als je die optie inschakelt, dan zullen ook alle eventuele submappen bijgewerkt worden.
- Om naar een bepaalde branch, tag of datum bij te werken kies je in het menu Geavanceerd voor Update naar Tag/datum uitvoeren...; je krijgt dan dit dialoogvenster:

Je weet intussen wel wat branches zijn, en ook het bijwerken naar een bepaalde datum spreekt voor zich. Je kan echter ook updaten naar een tag. Tags zijn markeringen die aangebracht worden voor een specifieke versie van de repository, zoals een release. Wil je dus exact dezelfde code als een bepaalde release, dan kan je bijwerken naar de bijbehorende release-tag.
6 Uitvoer tijdens het bijwerken; de status van bestanden
Of je nu CVS als commando gebruikt of via Cervisia, tijdens het bijwerken van je werkmap zal je meldingen zien van datgene waar CVS precies mee bezig is. Je krijgt ook bijgewerkte informatie over de status van elk bestand. In Cervisia kan je die uitvoer voor alle commando's (dus niet enkel tijdens het bijwerken) in het onderste deel van het hoofdvenster zien.
P: libmedia.cpp U: process.h M: README C: same_dialog.ui ?: TODO A: new_dialog.ui R: old_dialog.ui
De betekenis van de letters aan het begin:
- P wil zeggen dat CVS het bestand "gepatched" heeft met een nieuwere versie. Anders gezegd: CVS heeft enkel de verschillen tussen de twee bestanden gedownload en aan de hand daarvan de twee versies identiek gemaakt. U is min of meer hetzelfde, alleen vond CVS het efficiënter om het bestand integraal te downloaden en lokaal te vervangen, in plaats van het lokale bestand te patchen. Dat gebeurt voor alle nieuwe bestanden die van de repository aan je werkmap worden toegevoegd.
- M duidt erop dat je een gewijzigde versie in je werkmap hebt. Zoiets gebeurt uiteraard voor alle bestanden die je wijzigt: CVS houdt je wijzigingen intact en zal dus niet proberen om ze ongedaan te maken. Voorts zal CVS de wijzigingen van andere ontwikkelaars aan de bestanden in je werkmap toevoegen, zolang er geen conflicten lijken op te treden.
- C betekent dat er conflicten bestaan in een bestand dat je gewijzigd hebt. Terwijl jij aan een bestand aan het werken was, heeft een andere ontwikkelaar de lijnen gewijzigd waarmee jij aan de slag was. Er rest je dus niets anders dan dat bestand te wijzigen en de wijzigingen op een zinvolle manier in te voegen. Om te vermijden dat informatie verloren gaat, bewaart CVS een ongewijzigde versie van het bestand als .#bestandsnaam.versienummer_dat_je_wijzigde. Heb je bijvoorbeeld versie 1.5 van het bestand "same_dialog.ui" gewijzigd, dan zal de naam van het backup-bestand ".#same_dialog.ui.1.5" zijn.
- ? wil zeggen dat er een bestand in je werkmap zit, dat zich niet in de CVS-repository bevindt en dat evenmin in de lijst van te negeren bestanden vermeld wordt. CVS laat deze bestanden voor wat ze zijn, maar brengt je er wel van op de hoogte dat ze geen deel uitmaken van de repository en evenmin gecategoriseerd zijn onder de lijst van bestanden die genegeerd mogen worden.
- A zie je als je CVS expliciet opgedragen hebt om een bestand toe te voegen aan de lijst van bestanden waarvan jij vindt dat ze van het project deel uitmaken, maar nog geen commit hebt uitgevoerd om dat bestand ook daadwerkelijk aan de repository toe te voegen. R betekent hetzelfde, maar dan voor verwijderde bestanden: als je CVS hebt gevraagd om een bestand uit de repository te verwijderen, maar nog geen actie ondernomen hebt om dat ook te doen. Meer over het toevoegen en verwijderen van bestanden volgt verderop; weet alleszins dat die acties enkel zin hebben als je een eigen CVS-account hebt (anders kan je simpelweg geen commit uitvoeren).
Als je enkel de uitvoer van het CVS-commando ter beschikking hebt, kan het moeilijk zijn om in een oogopslag de status van bestanden te overzien. Cervisia toont de dingen wat gebruiksvriendelijker: de status van bestanden wordt in het hoofdvenster geïntegreerd. Ofschoon het programma de status van de bestanden automatisch nakijkt bij elke update, kan je onder het menu Bestand het item Status gebruiken (of gewoon "F5" drukken) om de status van bestanden te weten te komen zonder de werkmap te moeten bijwerken.
Bestanden kunnen als volgt ingedeeld worden, afhankelijk van de verschillen tussen de werkmap en de repository:
- Actueel: de bestanden zijn identiek.
- Lokaal gewijzigd: de versie in je werkmap verschilt van de versie in de repository door een wijziging die jij hebt toegebracht.
- Lokaal toegevoegd: je hebt CVS meegedeeld dat het bestand deel uitmaakt van het project, maar je hebt het nog niet aan de repository toegevoegd door middel van een commit.
- Lokaal verwijderd: je hebt CVS meegedeeld dat het bestand niet langer deel uitmaakt van het project, maar je hebt het nog niet uit de repository verwijderd door middel van een commit.
- Update vereist en Patch vereist: er is een nieuwere versie van het bestand beschikbaar in de repository.
- Conflict: je hebt wijzigingen aan het bestand toegebracht, maar nog geen commit uitgevoerd. Intussen heeft een andere ontwikkelaar dingen veranderd aan hetzelfde bestand. Bijwerken volstaat niet meer om de bestanden te synchroniseren, omdat de wijzigingen elkaar tegenspreken. Je zal dus het bestand manueel moeten aanpassen om het conflict op te lossen, alvorens je je wijzigingen doorvoert door middel van een commit.
7 Patches aanmaken, verschillen bekijken en patches toepassen in je werkmap
Patches aanmaken
Je hoeft geen CVS-account te bezitten voor een bepaald project, om ertoe te kunnen bijdragen. Je kan bijvoorbeeld patches aanmaken tegenover de repository. Een patch bevat de verschillen tussen twee bestanden of tussen een groep van bestanden, in een standaard-formaat dat het anderen mogelijk maakt de patch toe te passen op hun werkmap, zodat hun bestanden de wijzigingen bevatten.
Geef je patch een degelijke naam, waaruit de wijzigingen en de naam van de originele bestanden duidelijk worden. Stel bijvoorbeeld dat je een tekstbestand uit de repository nagekeken hebt. Een goede naam voor de patch zou dan bestandsnaam_nagelezen.diff zijn, waarbij "bestandsnaam" natuurlijk de naam van het originele bestand is. Het is gebruikelijk om de tekst die je gewijzigd hebt na te kijken en de wijzigingen te testen, alvorens je een patch verzendt.
Er wordt één bestand met verschillen opgesteld voor alle wijzigingen in de werkmap. Het opstellen van de verschillen gebeurt dus recursief: je kan één enkele patch aanmaken voor alle veranderingen die je hebt gemaakt tegenover de repository.
- Open de "sandbox" (werkmap) waar de veranderingen zich bevinden.
- Kies in het menu Geavanceerd voor Patch tegen repository aanmaken.
- Er komt een standaard dialoogvenster voor bestanden tevoorschijn. Geef de naam op van de patch die je wil maken en bevestig je keuze.
Meer moet dat niet zijn!
Verschillen bekijken
Cervisia heeft een ingebouwde functie om verschillen aanschouwelijk te maken.
- Open de "sandbox" (werkmap) waar de bestanden zich bevinden.
- Selecteer het gewijzigde bestand in het hoofdvenster van Cervisia.
- Kies in het menu Beeld voor Verschil met repository (BASE)... (je kan ook gewoon een context-menu gebruiken door het bestand in kwestie met de rechtermuisknop aan te klikken).
- Cervisia's ingebouwde weergaveprogramma voor verschillen springt tevoorschijn. Je kan eenvoudig tussen verschillen navigeren door te scrollen, of met behulp van de ">>"- en "<<"-knoppen.
Patches toepassen in je werkmap
Stel dat je een bug hebt gemeld. De ontwikkelaar van het programma zou je een patch kunnen bezorgen met de vraag om na te kijken of het je probleem oplost. Je zal dus die patch moeten toepassen en het programma opnieuw moeten compileren om het te kunnen testen. Om de patch toe te passen op een bestand of een groep bestanden kan je het commando "patch" gebruiken ("patch" maakt deel uit van de GNU diffutils). Om er zeker van te zijn dat alles goed verloopt, pas je de patch toe op het juiste doel: een map (en alle submappen en bestanden die erin zitten) of een bestand. Ben je niet zeker wat de bedoeling van de patch is, open het patch-bestand dan in een teksteditor. Ergens aan het begin van het bestand staat normaalgezien wat het doelbestand van de patch is. Je kan ook het programma "Kompare" uit het pakket kdesdk gebruiken. Pas je patch toe als volgt:
# begeef je eerst naar de map die het doelbestand bevat cd /pad/naar/doelbestand/of/map patch <patchbestand
Normaalgezien vertelt de uitvoer van het patch-commando je of alles goed verlopen is. Meer informatie vind je in de documentatie van patch (man patch of info patch).
8 Conflicten oplossen
Een conflict doet zich voor wanneer een andere ontwikkelaar enkele wijzigingen doorvoerde aan een bestand waar je zelf net mee bezig was. Je zal het bestand moeten aanpassen om de wijzigingen op een zinvolle manier toe te brengen.
CVS duidt de conflicterende aanpassingen op deze manier:
<<<<<<< wijzigingen in je werkmap ======= wijzigingen in de repository >>>>>>> revisie_nummer
Je moet dit hele blok vervangen door de nieuwe versie. Daarna kan je een commit doorvoeren of een patch aanmaken tegen de repository.
Gelukkig heeft Cervisia een handige interface aan boord voor de omgang met conflicten. Dat wil niet zeggen dat je nooit manueel bestanden zal moeten aanpassen, maar je hoeft dat tenminste niet meer te doen voor het wegwerken van eerder triviale conflicten.
- Open de "sandbox" (werkmap) waar de bestanden zich bevinden.
- Selecteer het conflicterende bestand in het hoofdvenster van Cervisia.
- Kies in het menu Bestand voor Oplossen (resolve).... Opnieuw kan je evengoed een context-menu gebruiken.
- Cervisia's ingebouwde programma om conflicten te lijf te gaan springt tevoorschijn. Je kan eenvoudig tussen conflicten navigeren door te scrollen, of met behulp van de ">>"- en "<<"-knoppen.
- De "A"-knop onderaan links zorgt ervoor dat jouw wijzigingen bewaard blijven en de wijzigingen in de repository verwijderd worden voor een specifiek conflict (merk op dat er best meerdere conflicten per bestand kunnen optreden!).
- De "B"-knop doet het omgekeerde: de wijzigingen in de repository bewaren en de jouwe verwijderen.
- De "A+B"-knop voegt de wijzigingen samen, jouw bestand wordt daarbij als basis gebruikt.
- De "B+A"-knop voegt de wijzigingen samen, maar gebruikt de repository als uitgangspunt.
- De "Edit"-knop, tot slot, biedt je de mogelijkheid om de wijzigingen manueel samen te voegen.
Merk op dat bovenstaande afbeelding geen conflicten bevat; de knoppen zijn dus niet beschikbaar.
9 Committing: bestanden en mappen wijzigen, toevoegen en verwijderen
Wijzigingen aanbrengen aan de repository
In CVS-jargon betekent een commit dat je bepaalde veranderingen aan je werkmap doorvoert naar de repository. Om dat te doen voor een repository via een netwerk, heb je een CVS-account nodig, en de betrokken modules zal je met die account moeten ophalen. Anonieme CVS staat geen commits toe. Het is ten zeerste aan te bevelen om de richtlijnen voor ontwikkelaars van het project in kwestie te raadplegen alvorens je een commit uitvoert. Het KDE-project heeft bijvoorbeeld een FAQ-sectie voor ontwikkelaars en een pagina over de regels omtrent commits die je wordt verondersteld in acht te houden.
Om een bestand of een groep bestanden te committen doorloop je de volgende stappen:
- Klik op Sandbox openen... in het menu Bestand.
- Selecteer een werkmap (een module) in het dialoogvenster.
- Selecteer de bestanden of mappen die je wilt committen.
- Merk op dat Cervisia acties uit de menu's of uit de knoppenbalk enkel toepast op de bestanden en mappen die je geselecteerd hebt. Als je slechts één bestand selecteert, dan zal ook enkel dat ene bestand gecommit worden. Klik je een map aan, dan zullen alle gewijzigde bestanden in die map gecommit worden. In het menu Instellingen vind je trouwens de optie Recursief vastleggen (commit) en verwijderen. Als je die optie inschakelt, dan zullen ook de gewijzigde bestanden in alle eventuele submappen gecommit worden.
- Kies in het menu Bestand voor Vastleggen (commit)..., of klik gewoon op de "Commit"-knop in de toolbalk (dat is de knop met de pijl omhoog).
- Je krijgt dan onderstaand dialoogvenster. Geef een logbericht op waarin je de wijzigingen beschrijft die je hebt toegebracht. Als je een van de eerdere logberichten wil gebruiken, dan kan je het selecteren in de lijst die Cervisia bewaart.

Bestanden verwijderen uit en toevoegen aan de repository
CVS beschouwt bepaalde bestanden pas als een onderdeel van de werkmap nadat je het expliciet zegt dat het dat moet doen. Dat is een slimme aanpak, omdat er een breed gamma aan automatisch gegenereerde bestanden bestaat, zoals backups, binaire bestanden als resultaat van een compilatie enzovoort. Geen van die bestanden moet samen met de broncode ge-upload worden, omdat het nu eenmaal om eenvoudig genereerbare afgeleiden gaat. Ga er bijvoorbeeld even van uit dat je een nieuw bestand in je werkmap hebt gecreëerd (of naar je werkmap hebt gekopieerd): eerst moet je het toevoegen aan de lijst van bestanden die CVS niet mag negeren. Daarna kan je het bestand vastleggen (commit). Op dezelfde manier moet je een bestand niet enkel verwijderen als je het ook uit de repository wil verwijderen, omdat CVS het dan bij de volgende update gewoon opnieuw aanmaakt! Nadat je het bestand lokaal verwijderd hebt, vertel je CVS dus dat het ook uit de repository verwijderd moet worden; dat zal dan gebeuren bij je eerstvolgende commit.
Onthoud ook vooral dat CVS ontworpen is voor de omgang met tekstbestanden. Vele mogelijkheden, zoals het samenvoegen van herzieningen, het overzichtelijk weergeven van verschillen enzovoort, zijn enkel mogelijk met tekstbestanden. Dat betekent niet dat je CVS niet kan gebruiken voor het beheren van binaire bestanden, het impliceert echter wel dat je CVS moet duidelijk maken dat het om een binair bestand gaat (anders kan je bestand gecorrumpeerd worden).
Ga als volgt tewerk om bestanden in een module (een werkmap) aan de repository toe te voegen:
- Kies in het menu Bestand voor Sandbox openen....
- Selecteer een werkmap (een module) in het dialoogvenster.
- Selecteer de bestanden die je wil toevoegen. Merk op dat toevoegen niet recursief werkt.
- Kies in het menu Bestand voor Aan repository toevoegen... als het om een tekstbestand gaat. Voor binaire bestanden kies je Binair toevoegen....
- Onderstaand dialoogvenster komt tevoorschijn. Bevestig je keuze.
- Om de bestanden daadwerkelijk toe te voegen, moet je nog een commit uitvoeren.

Bestanden verwijderen verloopt vrijwel identiek:
- Kies in het menu Bestand voor Sandbox openen....
- Selecteer een werkmap (een module) in het dialoogvenster.
- Selecteer de bestanden die je wil verwijderen.
- Kies in het menu Bestand voor Verwijderen uit repository....
- Een gelijkaardig dialoogvenster als het bovenstaande komt tevoorschijn. Bevestig je keuze.
- Om de bestanden daadwerkelijk te verwijderen, moet je nog een commit uitvoeren.
10 Besluit
Zoals je intussen hopelijk gemerkt hebt, valt het werken met CVS best wel mee. Er zijn paar minder intuïtief bevattelijke concepten, zoals de verschillende behandeling van tekstbestanden en binaire bestanden of het moeten doormaken van twee stappen om bestanden te verwijderen en toe te voegen, maar daar blijft het ook bij.
Cervisia maakt het geheel nog eenvoudiger, met een mooie interface voor het uitchecken van bestanden, het aanschouwen van verschillen, het oplossen van conflicten en het nagaan van de status van bestanden in de werkmap.
De auteur dankt Gary Cramblitt, auteur van "Building the KDE Source Newbie Guide", voor zijn bijdragen en Christian Loose, die Cervisia onderhoudt, voor zijn verbeteringen.
11 Licenties en verdiensten
De originele, Engelstalige versie van dit artikel verscheen op OSNews.com, meerbepaald op 20 februari 2004. Het artikel is van de hand van Carlos Leonhard Woelz; je kan hem bereiken op carloswoelz@NOSPAM.imap-mail.com.
Carlos Leonhard Woelz is een sponsor van Quanta Plus. Hij houdt zich bezig met het KDE Quality Team, dat ernaar streeft het kwaliteitsniveau van KDE-applicaties te verbeteren door de drempels te verlagen tussen potentiële ontwikkelaars en het daadwerkelijke ontwikkelen.
Tot nader order vind je het origineel van dit artikel terug op http://www.osnews.com/story.php?news_id=6096.
Vertaald met permissie; het copyright op het origineel berust bij OSNews.com.
Over deze site | Laatst gewijzigd: $Date: 2005/04/24 18:27:05 $ door: $Author: tijmen $


