Changes between Version 19 and Version 20 of Documentatie/Ontwikkelaar/Omgeving/Tools


Ignore:
Timestamp:
09/09/15 12:11:06 (11 years ago)
Author:
adriaan
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentatie/Ontwikkelaar/Omgeving/Tools

    v19 v20  
     1[[TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)]] 
     2[[TOC(heading=Hoofdstukken, sectionindex, compact, depth=2, allactive, indirect=Documentatie/Ontwikkelhandleiding/TOC)]] 
     3[[TOC(heading=Onderwerpen, sectionindex, compact, depth=3, allactive, indirect=Documentatie/Ontwikkelhandleiding/Ontwikkelomgeving/TOC)]] 
     4 
    15= Source Control Tools = 
    2  
    3 [[TOC(heading=Inhoudsopgave)]] 
    4 [[TOC(heading=Hoofdstukken, sectionindex, compact, depth=2, Documentatie/Ontwikkelhandleiding/*)]] 
    56 
    67OpenAC wordt ontwikkeld en onderhouden in een [http://subversion.apache.org/ Subversion] repository. 
    78Subversion is de standaard manier om met die repository om te gaan, maar het is ook mogelijk om 
    89met andere versiebeheer programma's aan OpenAC te werken. 
     10 
     11== Repository == 
     12 
     13De sources van OpenAC staan in een source-repository op https://svn.openac.fenac.nl/ . De source-repository is alleen te benaderen door OpenAC ontwikkelaars en ACs met OpenAC geinstalleerd. 
     14 
     15[[NoteBox(warn, OpenAC is geen Open Source software. Het is alleen beschikbaar voor de Audiologische Centra die zijn aangesloten bij de FENAC.)]] 
    916 
    1017== Subversion == 
     
    3037 - OpenAC v2.010 en later gebruiken allemaal Python 2.7 met Subversion 1.7 
    3138 
     39=== !PyCharm === 
     40 
     41!PyCharm ondersteunt uit zichzelf al verschillende SVN versies; het is voldoende om de starterkit te installeren om een geschikte SVN checkout te krijgen waarmee !PyCharm verder kan. Zie ook de [wiki:IDE#PyCharm PyCharm] handleiding voor OpenAC. 
     42 
    3243=== SlikSVN === 
    3344 
    3445Een geschikte Subversion client voor command-line gebruik is [http://sliksvn.com/ SlikSVN]. Je moet een versie van SlikSVN downloaden die overeenkomt met de Subversion versie van OpenAC die je gebruikt; dat is een 1.5 versie voor oudere OpenAC versies en 1.7 vanaf OpenAC v2.010. Deze zijn te vinden bij de ''older versions'' download link, of [https://sliksvn.com/pub/ hier op de SlikSVN site]. 
    35  
    36 === !PyCharm === 
    37  
    38 !PyCharm ondersteunt uit zichzelf al verschillende SVN versies; het is voldoende om de starterkit te installeren om een geschikte SVN checkout te krijgen waarmee !PyCharm verder kan. 
    3946 
    4047=== Linux === 
     
    4552== Git == 
    4653 
    47 Git is een gedistribueerd versiebeheer systeem met een zeer uitgebreide toolset en een nogal cryptische ''core'' -- een kern waarmee je wel alles kunt. Git beschikt ook over een goeie SVN bridge, zodat je met git kunt werken en  de gedistribueerde kenmerken van git kunt gebruiken en '''tegelijk''' ook gecontroleerd met Subversion om kunt gaan. Hierdoor wordt het mogelijk om samen te werken in git en dan af te ronden in Subversion. 
     54Git is een gedistribueerd versiebeheer systeem met een zeer uitgebreide toolset. Git beschikt over een goeie SVN bridge, zodat je met git kunt werken en  de gedistribueerde kenmerken van git kunt gebruiken en '''tegelijk''' ook gecontroleerd met Subversion om kunt gaan. Hierdoor wordt het mogelijk om samen te werken in git en dan af te ronden in Subversion. 
    4855 
    4956 
    5057[[NoteBox(tip, Hier staat alleen hoe je OpenAC-specifieke handelingen voor git moet ondernemen. Een [http://git-scm.com/book/en/Git-Basics algemene handleiding voor git] is het boek Pro Git (gratis via de git site).)]] 
    5158 
    52 [[NoteBox(warn, Omdat git over ssh gaat, moet je wel naar de OpenAC server kunnen ssh-en. Dat is aan FENAC-ontwikkelaars voorbehouden en gekoppeld aan specifieke IP adressen.)]] 
     59[[NoteBox(warn, Omdat git over ssh gaat, moet je wel naar de OpenAC server kunnen ssh-en. Dat is aan FENAC-ontwikkelaars voorbehouden en gekoppeld aan specifieke IP adressen. Er is geen openbare OpenAC-git repository.)]] 
    5360 
    5461=== Installatie === 
     
    99106}}} 
    100107   De laatste van deze drie commando's stelt een mapping in tussen de SVN gebruikersnamen en de git gebruikersgegevens. Zorg ervoor dat jouw gegevens overeenkomen met wat er in de `git-author-file` staat, anders krijg je rare merge conflicten in git. 
    101  - '''Update''' Dit werkt de checked out working-directory bij naar de 
    102    huidige stand van SVN, met behoud van eigen commits sinds de laatste keer 
    103    (zoals `svn up`). 
     108 
     109=== Eenvoudige Workflow === 
     110 
     111Op de manier zoals hierboven is omschreven kan je git gebruiken als SVN client. Enig voordeel ten opzichte van SVN zelf is dat je ook lokale commits kunt doen en iets lokaal af kunt maken zonder dat je tussentijdse commits naar SVN hoeft te doen. Aan het eind van de rit kan je met ''dcommit'' je changesets naar SVN pushen.  
     112 
     113Deze workflow neemt aan dat je aan '''een''' feature of ticket gaat werken, en daarbij enkele tussentijdse commits doet als een deel van het werk voltooid is. Als het klaar is, gaat het feature of de oplossing voor het ticket in een keer naar de SVN repository; daarbij worden de git commits een-op-een overgezet als SVN commits. 
     114 
     115 - '''Bijwerken''' Werk eerst de OpenAC git checkout bij naar de laatste revisie, en wissel daar naartoe (dit neemt aan dat je geen onvoltooid werk hebt liggen): 
    104116   {{{ 
    105117git checkout git-svn 
    106 git pull --rebase 
     118git pull 
    107119}}} 
    108  - '''Commit''' In git kan je altijd lokaal committen. Deze commits gaan niet (direct) naar de centrale server, en je kan dus experimenteren en/of een feature in meerdere commits opbouwen zonder dat dat zichtbaar is voor de buitenwereld. Hoe git commits te doen staat in de git handleidingen. 
    109  - '''SVN Push''' Als je iets af hebt en dat om wilt zetten naar SVN changesets, doe je 
     120 Nu heb je een checkout van een moment. Wijzigingen in OpenAC SVN hebben geen invloed op je checkout tot je opnieuw een ''pull'' doet. 
     121 - '''Wijzigen''' Je kunt nu gewoon wijzigingen aanbrengen in jouw OpenAC checkout. Dat is niet anders dan met een SVN checkout.  
     122 - '''Offline''' Git ondersteunt een offline model van werken. Dat betekent dat je git checkout de volledige geschiedenis met zich meedraagt; je kunt offline dus ook `log` of `blame` gebruiken. 
     123 - '''Log''' Je kan met `git log` de log messages opvragen. Omdat git de geschiedenis ook heeft, heb je daar geen netwerk toegang voor nodig. Er zijn ook grafische tools om de commits te laten zien. 
     124 - '''Commit''' !PyCharm herkent automatisch een git checkout en je kunt dan inchecken met dezelfde interface als in SVN -- alleen gaat de commit dan naar de lokale git checkout. Je kunt ook met de command-line een commit doen. Gebruik daarbij nog steeds een betekenisvolle commit-message. Een voordeel van git is dat je met ''rebase'' een aantal commits kunt herzien, bijvoorbeeld om de commit-message te verbeteren of om tussentijdse commits samen te voegen. 
     125 - '''SVN Commit''' Als je tevreden bent met je git commits, kan je met twee stappen de changes overhevelen naar SVN en git weer up-to-date brengen. 
    110126   {{{ 
     127git svn rebase 
    111128git svn dcommit 
    112129}}} 
    113    Hiermee worden je git commits een-voor-een naar SVN gestuurd als SVN commits. Je checkout wordt ook (net als bij update) bijgewerkt naar de meest recente SVN checkout. 
     130 De eerste van deze stappen haalt wijzigingen uit SVN op en probeert jouw wijzigingen er op toe te passen. Als er geen botsingen zijn tussen wat andere ontwikkelaars hebben gedaan en jouw werk, gaat dat goed. Daarna kan je nog een keer testen om te zien dat er geen functionele veranderingen effect hebben op jouw code. Met de tweede stap worden de git commits echt in SVN gezet. Daarna kan je weer verder met de volgende feature. 
    114131 
    115 === Workflow === 
     132=== Branching Workflow === 
    116133 
    117 Op de manier zoals hierboven is omschreven kan je git gebruiken als SVN client. Enig voordeel ten opzichte van SVN zelf is dat je ook lokale commits kunt doen en iets lokaal af kunt maken zonder dat je tussentijdse commits naar SVN hoeft te doen. Aan het eind van de rit kan je met ''dcommit'' je changesets naar SVN pushen. Eventueel kan je ook met '''branches''' werken om changesets onafhankelijk van elkaar te ontwikkelen, of om verschillende problemen los van elkaar op te lossen. 
     134Eventueel kan je ook met '''branches''' werken om changesets onafhankelijk van elkaar te ontwikkelen, of om verschillende problemen los van elkaar op te lossen. 
    118135 
    119136Het plaatje hieronder laat een (eenvoudige) grafische weergave zien van branches in git tijdens OpenAC ontwikkeling. 
     
    121138[[Image(branches.png)]] 
    122139 
    123 De branch ''git-svn'' komt overeen met SVN zelf. Er zijn twee remote branches, een genaamd ''backups'' (voor een niet nader gespecificeerd feature) en een genaamd ''ticket5150'' (om [ticket:5150 dat ticket] op te lossen). De ticket-branch is net geopend en loopt vanaf de nieuwste SVN revisie verder. De backups-branch is een stuk ouder. Onder normale omstandigheden zouden er meer branches zijn van wisselende ouderdom, en ook een mengsel van lokale en heel soms een remote branch. 
     140De branch ''git-svn'' komt overeen met SVN zelf. Er zijn twee branches, een genaamd ''backups'' (voor een niet nader gespecificeerd feature) en een genaamd ''ticket5150'' (om [ticket:5150 dat ticket] op te lossen). De ticket-branch is net geopend en loopt vanaf de nieuwste SVN revisie verder. De backups-branch is een stuk ouder -- misschien was je daar gisteren aan begonnen, en ben je nu met iets anders bezig. 
    124141 
    125142 
    126  - '''Lokale branch''' Om een ticket op te lossen in een aparte (lokale, heel goedkope) branch, maak je een branch, schakel je daar op over, werk je normaal en doe je gewoon git commits. Af-en-toe controleer je dat je hele geschiedenis van fixes nog werkt ten opzichte van wat er nu in SVN staat. Je kan tussendoor ook wisselen naar andere branches of naar de huidige staat van SVN als je aan iets anders moet werken. Tenslotte maak je de branch af met en verdwijnt die -- de commits worden allemaal omgezet in SVN commits. 
    127    - '''Maak branch''' Kies een naam voor de lokale branch. Als het voor een ticket is, gebruik dan de naam ''ticketNNNN'' met het ticket nummer erin. Hiermee houd je de ticket-branches duidelijk zichtbaar ten opzichte van feature- en experimenteer-branches. Start de branch op ''git-svn'' zodat je vanaf een bekende SVN revisie begint: 
     143Om een ticket op te lossen in een aparte '''lokale branch''', maak je een branch, schakel je daar op over, werk je normaal en doe je gewoon git commits. Af-en-toe controleer je dat je hele geschiedenis van fixes nog werkt ten opzichte van wat er nu in SVN staat. Je kan tussendoor ook wisselen naar andere branches of naar de huidige staat van SVN als je aan iets anders moet werken. Tenslotte maak je de branch af met en verdwijnt die -- de commits worden allemaal omgezet in SVN commits. 
     144 
     145 - '''Maak branch''' Kies een naam voor de lokale branch. Als het voor een ticket is, gebruik dan de naam ''ticketNNNN'' met het ticket nummer erin. Hiermee houd je de ticket-branches duidelijk zichtbaar ten opzichte van feature- en experimenteer-branches. Start de branch op ''git-svn'' zodat je vanaf een bekende SVN revisie begint: 
    128146   {{{ 
    129147git checkout git-svn 
    130148git checkout -b ticketNNNN 
    131149}}} 
    132    - '''Wissel branch''' Als je tussendoor van branch wilt wisselen -- bijvoorbeeld om verder te werken aan een ander ticket of om ''git-svn'' bij te werken -- dan gebruik je weer `git checkout`, bijvoorbeeld een van deze: 
     150 - '''Wissel branch''' Als je tussendoor van branch wilt wisselen -- bijvoorbeeld om verder te werken aan een ander ticket of om ''git-svn'' bij te werken -- dan gebruik je weer `git checkout`, bijvoorbeeld een van deze: 
    133151   {{{ 
    134152git checkout git-svn 
    135153git checkout ticketNNNN 
    136154}}} 
    137    - '''SVN bijwerken''' Zoals gewoonlijk kan je de branch ''git-svn'' bijwerken zoals hierboven beschreven. Maar daarmee heb je niet je eigen wijzigingen overgezet naar (git-)commits vanaf de meest recente SVN revisie. Daarvoor moet je eerst bijwerken vanuit SVN, en dan je eigen commits er bovenop zetten: 
     155 - '''SVN bijwerken''' Zoals gewoonlijk kan je de branch ''git-svn'' bijwerken zoals hierboven beschreven. Maar daarmee heb je niet je eigen wijzigingen overgezet naar (git-)commits vanaf de meest recente SVN revisie. Daarvoor moet je eerst bijwerken vanuit SVN, en dan je eigen commits er bovenop zetten: 
    138156   {{{ 
    139157git checkout git-svn 
     
    142160git rebase git-svn 
    143161}}} 
    144    - '''Geschiedenis aanpassen''' In git doe je heel vaak kleine commits en er kunnen ook "tussentijdse" tussen zitten die op zichzelf niet interessant zijn. Je kunt een branch met commits interactief herschrijven door commits samen te voegen en log-messages te veranderen, voordat je ze naar SVN stuurt. Daarvoor gebruik je de `-i` vlag bij rebase: 
     162 - '''Geschiedenis aanpassen''' In git doe je heel vaak kleine commits en er kunnen ook "tussentijdse" tussen zitten die op zichzelf niet interessant zijn. Je kunt een branch met commits interactief herschrijven door commits samen te voegen en log-messages te veranderen, voordat je ze naar SVN stuurt. Daarvoor gebruik je de `-i` vlag bij rebase: 
    145163   {{{ 
    146164git checkout ticketNNNN 
     
    148166}}} 
    149167   Dit start een tekst-editor op met instructies over hoe je de commits kunt her-ordenen of anders aanpassen. 
    150    - '''Branch afmaken''' Ben je helemaal klaar met een branch en wil je de commits in die branch overzetten naar SVN zodat ze ook echt in OpenAC zitten, dan doe je eerst SVN bijwerken, daarna SVN push en tot slot gooi je de branch weg -- in feite gooi je alleen de naam van de branch weg, de commits blijven staan want ze zitten dan al in SVN. Bijwerken en push staan hierboven beschreven. Weggooien van de branch gaat tenslotte zo: 
     168  - '''Branch afmaken''' Ben je helemaal klaar met een branch en wil je de commits in die branch overzetten naar SVN zodat ze ook echt in OpenAC zitten, dan doe je eerst SVN bijwerken, daarna SVN push en tot slot gooi je de branch weg -- in feite gooi je alleen de naam van de branch weg, de commits blijven staan want ze zitten dan al in SVN. Bijwerken en push staan hierboven beschreven. Weggooien van de branch gaat tenslotte zo: 
    151169   {{{ 
    152 <alle stapjes van SVN bijwerken> 
     170git checkout git-svn 
     171git pull --rebase 
     172git checkout ticketNNNN 
     173git rebase git-svn 
    153174git checkout git-svn 
    154175git merge ticketNNNN 
    155176git branch -d ticketNNNN 
     177git svn dcommit 
    156178}}} 
    157179   Bij de `git merge` moet git zoiets zeggen als ''fast forward''. Als je daarentegen een merge-dialoog krijgt, dan is er iets mis en had je eerst SVN moeten bijwerken. 
    158  - '''Remote branch''' Als je wilt samenwerken aan een feature, maar niet wilt dat dit meteen zichtbaar is in SVN, of als je een bugfix hebt maar die wilt laten reviewer, dan kan je een lokale branch als '''remote''' branch in de git repository pushen. Dan wordt de branch zichtbaar voor anderen die de git repository gebruiken, maar wordt het niet naar SVN gepusht. Hierdoor kan er "onzichtbaar" aan iets gewerkt worden totdat het af is, en kan iets goed getest worden voordat het in SVN komt. 
    159    - '''Branch publiceren''' 
    160    - '''Branches volgen''' 
    161    - '''Branch afmaken''' Als je een remote branch hebt (voor een bepaald ticket, zeg) en je weet dat die klaar is (iedereen heeft het gezien, changesets gepushed, is getest enzovoorst) dan kan je het afmaken door de branch naar SVN te pushen. Ondertussen kan je geschiedenis herschrijven. Daarna moet je wat opruimwerk doen. In [attachment:git-svn-finish.sh] staat een script ter illustratie (waarschijnlijk kan dat makkelijker). 
    162180 
    163181=== Infrastructuur === 
    164182 
    165 (dit is de documentatie over hoe de git-svn infrastructuur op de server is geconfigureerd; dat gaat allemaal volgens de handleiding van tfnico.com) 
     183Dit is de documentatie over hoe de git-svn infrastructuur op de server is geconfigureerd; dat gaat volgens de handleiding van tfnico.com, met de volgende details: 
     184 
     185 - In de SVN homedir zijn er twee git repositories, `openac-fetch` en `openac-git`. De fetch-repo is een volledige repo, die '''alleen''' gebruikt wordt om SVN commits om te zetten naar git commits. De repo `openac-git` is een bare repository, waar de SVN commits vervolgens heengaan. Gebruikers clonen `openac-git`. In die repo zitten ook tags voor OpenAC releases e.d., die niet in de fetch-repo zitten. De fetch-repo is eenvoudig automatisch opnieuw te maken door SVN geschiedenis weer te importeren. 
     186 - Een van de commit hooks draait `bin/openac-gitsvn.sh`, die bij elke commit, de git repositories bijwerkt. 
     187 - Gebruikers van SVN moeten in de OpenAC repository in `bin/git-author-file` worden toegevoegd '''voordat''' ze hun eerste commit doen, anders stokt de SVN import.