Git op eduserv
Feb 12th, 2008 by RealNitro
Onder invloed van Nicolas ben ik een eindje terug git-gebruiker geworden. Git is een snel versiecontrolesysteem (version control system), zoals svn, maar dan anders.
Een groot verschil is dat git ‘distributed’ is. Wat dat precies inhoudt ga ik hier niet uitleggen, wikipedia kan dat veel beter.
Vorige week kreeg ik plots het idee om een git-repository te maken op eduserv.ugent.be (of moet ik genix zeggen?). Het leek me handig voor studenten die gebruik wilden maken van een versiecontrolesysteem maar niet over een eigen server beschikten. De rest van deze post is een korte tutorial die je uitlegt hoe je een repository ‘pusht’ naar eduserv. Ik veronderstel dus dat je al een basiskennis van git hebt.
Log in op eduserv via ssh. Voer volgend commando uit:
cp /users/j/jgeirega/git-script.sh .
(Inclusief de ‘.’!) Als je de inhoud van dit script bekijkt (bijvoorbeeld met “cat git-script.sh”), dan zie je dat je PATH variabele hierdoor veranderd wordt. Dit betekent dat al je bestanden uit mijn home-map (/users/j/jgeirega/bin) zal gebruiken om met git te werken; Als je dit niet vertrouwt (ik kan in feite gelijk welk commando in die map stoppen, maar dat doe ik uiteraard niet) kan je je eigen git compileren, daarover meer op het einde van deze post. Pas nu ook met een editor naar keuze (pico-gebruikers vinden die terug als /opt/csw/bin/pico) je .profile bestand aan, opnieuw om de PATH variabele aan te passen. Voeg volgende regel toe:
PATH="$PATH:/users/j/jgeirega/bin"
(Hier geldt dezelfde opmerking als daarnet.) Als je nu uitlogt en opnieuw inlogt zou je op eduserv het commando ‘git’ moeten kunnen uitvoeren. De output zou moeten beginnen met:
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate] [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]
Maak nu waar een map aan waar je je repository wil plaatsen. (Opmerking: gewoonlijk laat men de mapnaam van een git repository eindigen op ‘.git’. Bijvoorbeeld ‘test.git’.) Als je je repository via het internet beschikbaar wil maken kan je het bijvoorbeeld in je WWW map zetten. Navigeer in je repository-map en voer uit:
git --bare init
Voer nu uit:
chmod u+x hooks/post-update
Zorg dat je het preciese pad van die map kent (gebruik bijvoorbeeld het commando ‘pwd’), en je werk op eduserv zit erop!
Terug op je lokale machine open je in je lokale repository het bestand .git/config met een editor naar keuze. Voer daarvoor volgend commando uit:
git-remote add eduserv ssh://GEBRUIKERSNAAM@eduserv.ugent.be/MAPNAAM
Vervang GEBRUIKERSNAAM door je gebruikersnaam en MAPNAAM door de naam van de map waarin je zonet een lege (bare) git-repository hebt gemaakt. Om nu de volledige inhoud van je repository naar eduserv te ‘pushen’ voer je uit:
git-push --force --all --receive-pack=~/git-script.sh eduserv
De output zou moeten gelijken op:
updating 'refs/heads/master'
from 0000000000000000000000000000000000000000
to 2318059c3497c80885602654045511a58b37d9c8
Generating pack...
Done counting 6 objects.
Deltifying 6 objects...
100% (6/6) done
Writing 6 objects...
100% (6/6) done
Total 6 (delta 0), reused 0 (delta 0)
refs/heads/master: 0000000000000000000000000000000000000000 -> 2318059c3497c80885602654045511a58b37d9c8
Vanaf nu mag je de –force en –all na git-push weglaten als je je eduserv-repository wil updaten:
git-push --receive-pack=~/git-script.sh eduserv
Merk op dat –receive-pack het script doorgeeft dat je eerder op eduserv hebt gekopieerd. Dat script is (voor zover ik weet, ksh is een raar ding) nodig om te zorgen dat enkele nodige uitvoerbare (git-)bestanden in je PATH zitten.
Als je je repository onder je WWW map hebt gemaakt kan je het nu clonen over http. Bijvoorbeeld voor een van mijn publieke repositories:
git-clone http://studwww.ugent.be/~jgeirega/git-repos/test.git/
Wil je zelf git compilen op eduserv? Download dan eerst een git tarball met wget of scp hem naar je account (hier gebruik ik de .tar.gz versie), en extract de tarball met:
gzip -dc git-1.5.2.5.tar.gz | tar xf -
Verander git-1.5.2.5.tar.gz naar de versie die je hebt gedownload. Cd in de uitgepakte map en open het bestand Makefile in je favoriete editor. Om git-1.5.2.5 te kunnen compileren moest ik de regels
ifndef NO_TCLTK
OTHER_PROGRAMS += gitk-wish
endif
in commentaar zetten, en in het configuratiegedeelte van SunOs (begint met “ifeq ($(uname_S),SunOS)” en eindigt met “endif” heb ik voor die endif het volgende toegevoegd:
# EDUSERV SPECIFIC
AR = gar
TAR = tar
BASIC_CFLAGS += -I/opt/csw/include
BASIC_LDFLAGS += -L/opt/csw/lib
NO_TCLTK = NoThanks
NEEDS_LIBICONV = YesPlease
ICONVDIR = /opt/csw
CURLDIR = /opt/csw
Zorg dat /opt/csw/bin/ en /opt/csw/gcc4/bin/ in PATH zitten. Voeg daarvoor volgende regel toe aan ~/.profile:
PATH="/opt/csw/bin:/opt/csw/gcc4/bin:$PATH"
Log opnieuw in, navigeer opnieuw naar je git-map en voer eerst ‘gmake’ en daarna ‘gmake install’ uit. Als alles zonder fouten is verlopen heb je nu in je home-map een map ‘bin’ met daarin alle uitvoerbare git-bestanden… Succes!
Edit: Enkele kleine aanpassingen. Bedankt Nicolas. ![]()

*phuh* ‘t Zal nog mijn schuld zijn dat ge git gebruikt ook
Kleine opmerkingetjes:
- Ipv PATH=/users/…/jgeirega/bin:$PATH te gebruiken in .profile, kan je misschien beter PATH=$PATH:/users/… gebruiken. Op die manier zullen applicaties die in het systeem-path zitten gebruikt worden voor die in Jens’ bin directory.
- Misschien vermelden dat het de gewoonte is om, als je een bare repository maakt, de directorynaam te laten eindigen op .git
- Ipv .git/config manueel aan te passen: git-remote add eduserv ssh://blabla/blabla
Nice work iig. Krijg je gitweb aan de praat? cgi-bin werkte ooit toch op eduserv…
Anderzijds, misschien kan UGent gewoon beslissen zelf git hosting aan te bieden via gitosis (http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way) ofzo
Nicolas
Cool!
Van die f*cking KSH kan je afgeraken door gewoon bash te starten in je profile, liefst nog met exec, zodat je geen twee keer moet uitloggen.
Ooit had ik via de Computercommissie kunnen bekomen dat men SVN-hosting zou aanbieden aan de studenten. Ik vrees echter dat er niets van in huis gekomen is. Misschien kan je nog eens pushen voor git?
Misschien is een mailtje naar Rudy Gevaert wel voldoende
Nicolas: ik heb je opmerkingen in de post verwerkt.
Peter: het probleem is dat wanneer git connect over ssh, de .profile niet wordt uitgevoerd. Dus je zit met ksh opgescheept. Als je trouwens bash als default shell hebt zal .bash_profile ook niet worden uitgevoerd bij git-over-ssh, enkel .bashrc.
Ivm SVN: er is nu ook SVN voor studenten hoor. (Het is er _eindelijk_ van gekomen.) Je kan een account aanmaken op http://savannah.ugent.be/ daarvoor. Ik heb er zelf wel geen ervaring mee.