Softwaredeployment met Git en SVN via SSH

Sinds de lancering van de SSH-toegang op onze Linux shared hosting omgeving hebt u de git- en svn-binaries ter uwer beschikking. Deze staan u niet enkel toe om aan version control te doen, maar ook om data binnen te halen. U kan met andere woorden deployen vanuit een source control repository.

Als u met tags en branches werkt, kan u zo een specifieke versie van uw software naar onze omgeving sturen. En dit terwijl u mogelijks nog volop aan het ontwikkelen bent aan uw applicatie in een andere branch van uw repository.

Er zijn twee mogelijke strategieën die u kan hanteren:

  • De data van uw branch exporteren zodat enkel de files op uw pakket terechtkomen
  • De branch van uw project uitchecken en zo ook server- en revisieinformatie bijhouden

Subversion

Subversion, ook wel gekend als SVN, is een erg traditionele manier van version control. De basisstrategie is dat er één centrale server is waar alle code in verschillende versies bijgehouden wordt. Alle deployment gebeurt vanuit die centrale server. Intussen is Subversion een Apache top level project geworden. Op de officiële website kan u meer terugvinden over de werking ervan.

Wij voorzien op onze omgeving enkel een svn-client, geen server. De bedoeling is dat u vanop onze hosting connecteert met uw Subversion-server.

Voorbeelden

Om een svn-branch te exporteren naar uw pakket kan u bijvoorbeeld volgend commando gebruiken:

svn export http://uw.svn.server/repo/trunk/ .

Bovenstaand commando zal connectie maken met uw svn-server (die op ‘uw.svn.server draait’) en de repository ‘repo’ benaderen. Van deze repository wordt in dit geval de ‘trunk’ branch binnengehaald.

U kan ook een branch uitchecken. Dit doet u als volgt:

svn co http://uw.svn.server/repo/trunk/ .

De files van deze branch komen evenzeer op uw pakket te staan, maar er zal ook een ‘.svn’-map voorzien worden die de revisieinformatie bijhoudt. Via een ‘svn up’-commando kan u eventuele wijzigingen automatisch binnentrekken. U kan daarnaast ook wijzigingen terugsturen via het ‘svn commit’-commando.

Git

Hoewel Git al vrij oud is en vroeger voornamelijk gebruikt werd als versie control voor het onderhouden van de Linux kernel, is het momenteel de standaard geworden. In tegenstelling tot Subversion, is er bij Git niet noodzakelijk één centrale server. Git werkt gedistribueerd en repositories kunnen in beide richtingen gesynchroniseerd worden. Op de officiële website van Git vindt u meer informatie over de werking.

U hebt ook de mogelijkheid om op uw pakket een nieuwe git-repository aan te maken en eventuele wijzigingen bij te houden. Deze kan u synchroniseren met andere repositories. Niettegenstaande dit een interessante manier van werken is, hanteren we voor deployments eerder een pull-strategie en geen push-strategie.

Voorbeelden

Om een git-repository binnen te halen, kan u volgend commando gebruiken

git clone --depth=1 git://github.com/username/repo.git .

Bovenstaand commando zal connectie maken met uw git-server (in dit geval is dit github.com) en de repository ‘repo’ benaderen. Deze repository draait binnen uw account die hier voorgesteld wordt door ‘username’.

Het ‘git clone’-commando is het equivalent van ‘svn co’. Met andere woorden: informatie over versies wordt ook opgehaald en in de ‘.git’-map gezet. U kan dus bijdragen aan deze repository en wijzigingen doorsturen.

Om u te beperken tot een export van de gegevens kan u na de ‘git clone’ de ‘.git’-map verwijderen. Dit doet u als volgt:

rm –rf .git

Om dit in één beweging te doen kan u beide commando’s als volgt combineren:

git clone --depth=1 git://github.com/username/repo.git . && rm –rf .git

De ‘--depth=1’-parameter beperkt de hoeveelheid versieinformatie die opgehaald wordt. Wenst u dit niet te beperken, laat dan de parameter achterwege.