Netbeans 7.1.1 & Subversion 1.19.* import werkt niet

Netbeans en subversion gaan soms niet echt vloeiend samen en zo nu en dan kost het je best wat tijd om dingen weer ‘recht’ te trekken maar vandaag maakten ze het wel heel bont. Het begon met een project waar de SVN dusdanig verziekt was dat ik het verstandiger vond om deze even opnieuw te builden. Simpel; oude repo weggegooid, .svn folders opgeruimd en Netbeans opnieuw gestart om te wennen aan de nieuwe situatie. Maar om onduidelijke redenen wilde hij gewoon niet meer opnieuw het project importeren in SVN. Wat ik ook deed, na Team > Subversion > Import into repository bleef alles stil, geen errors, geen meldingen, helemaal niets… Halve internet doorzocht, logs doorgespit maar gewoon null.

Had al bijna besloten dat dit project op zich geen SVN nodig had maar wilde gewoon niet toegeven aan een overwinning van Netbeans & Subversion dus toen toch nogmaals alles rustig bekeken. Enige wat ik kon bedenken was dat hij toch ergens in een soort cache herinneringen had die hem dwars zaten. Wat was geen oplossing;

  1. NBproject data van project verwijderen
  2. Netbeans 100x opnieuw opstarten
  3. PC opnieuw opstarten
  4. Netbeans updates installeren (stonden er nog paar klaar)
  5. Log files lezen

Uiteindelijk besloten om alle SVN cache van Netbeans te vernietigen (windows 7 te vinden in C:\Users\[username]\.netbeans\7.1\var\cache\svncache) en dit loste het probleem op wonderbaarlijke wijze op. Moet me er voor nu bij neerleggen dat niet snappen maar gewoon erop inhakken door cache te legen de enige oplossing was die werkte. Had nog wel wat mensen met soortgelijke problemen gezien maar toch nét niet hetzelfde.

Versiebeheer met Subversion

Sinds de dag dat ik kennis maakte met versiebeheer was ik verkocht. Eerder hoorde ik hier en daar wel eens developers die het gebruikten maar omdat ik zelf niet wist hoe geweldig het was miste ik niets. Tegenwoordig gebruiken we in principe voor alles versiebeheer middels Subversion (SVN). Ongeacht het formaat van het project.

Wat is versiebeheer?
In basis is dit software waarmee wijzigingen in software of documenten kunnen worden bewaard. Alle wijzigingen worden als het waren gelogd in een soort geschiedenis. Wijzigingen krijgen een uniek nummer zodat snel te zien welke mutaties bij welke versie horen. Zeker in omgevingen waar je met meerdere gebruikers aan één project werkt is versiebeheer een uitkomst. Zo kun je eenvoudig de laatste mutaties van je collega’s binnenhalen als je met een project begint en kun je de door jou gemaakte mutaties snel verspreiden onder de rest van het team. Daarnaast biedt versiebeheer je de mogelijkheid om terug te kijken in de geschiedenis. Op welk moment is iets aangepast en door wie.

Subversion
Wij gebruiken op kantoor subversion voor ons versiebeheer. Subversion is eenvoudig te koppelen vanuit Eclipse of Netbeans en werkt redelijk eenvoudig. In het kort;

  1. We maken een nieuwe SVN repository (zeg maar een plaats waar de historie van bestanden bewaard wordt) aan op onze eigen SVN server
  2. We bepalen op de server welke gebruikers er zijn en welke rechten ze hebben op dit project
  3. Daarna gaan we naar onze IDE en koppelen het project aan de aangemaakte SVN
  4. Hierna kun je lokaal bepalen welke zaken je wel niet (settings van je IDE bijvoorbeeld) in de SVN repository wilt opslaan
  5. De laatste stap is de initiële import, hierbij importeer je als het ware het project in zijn huidige staat in de repository

Vanaf dit moment heb je een werkend project met SVN koppeling. Vanaf nu zal je IDE bij alle wijzigingen in bestanden en mappen met een icoontje of kleurtje aangeven dat deze gewijzigd is ten opzichte van de laatste SVN situatie. Je kunt dan je wijzigingen toevoegen aan de repository (commit), vernieuwen volgens de actuele repository (update) of terugdraaien naar de repository status (revert).

Samen werken
Bij iedere commit kun je opmerkingen meegeven. Zo zien je collega’s gelijk wat de reden was van de update mochten ze hem binnenhalen middels een update of later terugzien in de geschiedenis van het bestand. Als je toevallig tegelijk één bestand gewijzigd hebt dan heb je een conflict. Dit is vaak eenvoudig op te lossen door beide versies met elkaar samen te voegen. Je IDE is vaak zelf perfect in staat om te kijken of de wijzigingen elkaar overlappen of dat het twee verschillende delen van de code betreft.

Nog een voordeel van versiebeheer
Wij doen ook regelmatig projecten voor grotere organisaties waarbij het belangrijk is dat mutaties aan de code genoteerd worden. Zo kun je later eenvoudig terugzoeken op welk moment een bepaalde bug bijvoorbeeld is opgelost, door wie en welke bestanden daarmee gewijzigd zijn. Bij wijzigingen kan het handig zijn omdat je bijvoorbeeld een wijziging in een tabelstructuur die meerdere bestanden omvat in één keer terug kunt draaien alsof hij nooit heeft plaatstgevonden.

Branches en tags
Het is ook mogelijk verschillende versies van een project naast elkaar te hebben. Dit doe je met branches. Als je bijvoorbeeld een nieuwe functionaliteit gaat ontwikkelen die voorlopig nog los moet staan van het hoofdproject (wat ondertussen wel doorontwikkeld wordt) maar op termijn wel samengevoegd gaat worden dan maak je een branche aan. Dit is eigenlijk gewoon een virtuele kopie van de trunk (hoofdmap van het project) waarin afwijkingen ten opzichte van de core worden bijgehouden. Op een later moment kan dan beslist worden een branche te integreren in de trunk zodat dit dus de productieversie wordt. Als een branche voorlopig niet meer actief ontwikkeld wordt noemt men deze een tag. Er is namelijk verder geen verschil tussen een branche en een tag.