Synchronize Git repositories
Het is heel eenvoudig om je Git-repository te synchroniseren met nieuwe commits in de oorspronkelijke SVN-repository. Dit zorgt voor een comfortabele transitie in het migratieproces waarin je je bestaande SVN-workflow kunt blijven gebruiken, maar kunt beginnen te experimenteren met Git.
Het is mogelijk om in beide richtingen te synchroniseren. We raden echter een synchronisatie in een richting van SVN naar Git aan. Tijdens je transitie moet je alleen een commit maken naar je SVN-repository, niet naar je Git-repository. Als je er zeker van bent dat je team klaar is om over te stappen, kun je het migratieproces voltooien en beginnen met het committen van wijzigingen naar Git in plaats van SVN.
In de tussentijd moet je doorgaan met het maken van commits naar je SVN-repository en je Git-repository synchroniseren wanneer dat nodig is. Dit proces is vergelijkbaar met de conversiefase, maar aangezien je slechts met incrementele wijzigingen te maken hebt, zou het veel efficiënter moeten zijn.
Het auteursbestand bijwerken
Het bestand authors.txt
dat we hebben gebruikt om SVN-gebruikersnamen toe te wijzen aan volledige namen en e-mailadressen is essentieel voor het synchronisatieproces. Als het vanuit de locatie ~/GitMigration/authors.txt
die we tot nu toe hebben gebruikt is verplaatst, moet je de locatie bijwerken met:
git config svn.authorsfile
Als nieuwe ontwikkelaars zich sinds de laatste synchronisatie (of de eerste kloon) hebben ingezet op de SVN-repository, moet het bestand van de auteur dienovereenkomstig worden bijgewerkt. Je kunt dit doen door handmatig nieuwe gebruikers toe te voegen aan authors.txt
, maar je kunt ook de optie --authors-prog
gebruiken die in de volgende sectie wordt besproken.
Voor eenmalige synchronisaties is het vaak gemakkelijker om het auteursbestand rechtstreeks te bewerken. De optie --authors-prog
heeft echter de voorkeur als je synchronisaties zonder toezicht uitvoert (d.w.z. bij een geplande taak).
gerelateerd materiaal
Een volledige Git-repository verplaatsen
Oplossing bekijken
Git leren met Bitbucket Cloud
Automatisch Git-auteurs genereren
Als je auteursbestand niet bijgewerkt hoeft te worden, kun je doorgaan naar de volgende sectie.
De opdracht git svn
bevat een optie genaamd --authors-prog
, die verwijst naar een script dat SVN-gebruikersnamen automatisch omzet in Git-auteurs. Je moet dit script zo configureren dat je de gebruikersnaam van SVN als enige argument accepteert en dat je één regel retourneert in de vorm van Name
(net zoals de rechterkant van het bestand van de bestaande auteur). Deze optie kan erg handig zijn als je regelmatig nieuwe ontwikkelaars aan je project moet toevoegen.
Als je de optie --authors-prog
wilt gebruiken, moet je een bestand met de naam authors.sh
gebruiken in ~/GitMigration
. Voeg de volgende regel toe aan authors.sh
om een vervangende Git-naam en dito e-mailadres terug te geven voor alle auteurs die niet in authors.txt voorkomen
:
echo "$1 <$1@example.com>"
Dit genereert, ik herhaal het maar even, alleen een dummy-naam en e-mailadres op basis van de gebruikersnaam van de SVN. Wijzig die dus gerust als je een zinvollere toewijzing kunt maken.
De nieuwe SVN-commits ophalen
In tegenstelling tot SVN maakt Git een onderscheid tussen het downloaden van upstream-commits en het integreren ervan in het project. Het eerste heet 'ophalen' ('fetching'), terwijl het laatste kan worden gedaan door samen te voegen of te rebasen. Voer in de map ~/GitMigration
de volgende opdracht uit om eventuele nieuwe commits uit de oorspronkelijke SVN-repository op te halen.
git svn fetch
Dit is vergelijkbaar met de opdracht git svn clone
uit de vorige fase, omdat hiermee alleen de externe branches van de Git-repository worden bijgewerkt. De lokale branches geven nog geen updates weer. Je externe branches moeten daarentegen exact overeenkomen met de geschiedenis van je SVN-repo.
Als je de optie --authors-prog
gebruikt, moet je die als volgt in de bovenstaande opdracht opnemen:
git svn fetch --authors-prog=authors.sh
Synchroniseren met de opgehaalde commits
Voer de volgende opdracht uit om de gedownloade commits toe te passen op de repository:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
Hierdoor worden de opgehaalde commits ge-rebased naar je lokale branches, zodat ze overeenkomen met hun externe tegenhangers. Je zou nu de nieuwe commits moeten kunnen zien in je git log
-output.
Ruim de Git-repo op (opnieuw)
Het is ook een goed idee om het script git-clean
opnieuw uit te voeren om alle verouderde tags of branches te verwijderen die sinds de laatste synchronisatie uit de oorspronkelijke SVN-repository zijn verwijderd:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Je lokale Git-repository zou nu gesynchroniseerd moeten zijn met je SVN-repository.
Samenvatting
Tijdens deze transitie is het erg belangrijk dat je ontwikkelaars zich enkel toeleggen op de oorspronkelijke SVN-repository. De enige keer dat de Git-repository moet worden bijgewerkt, is via het synchronisatieproces dat hierboven is besproken. Dit is veel eenvoudiger dan het beheren van een synchronisatieworkflow in twee richtingen, maar het stelt je nog steeds in staat om Git te integreren in je ontwikkelingsproces.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.