Websites updaten met git
Wat ga je leren?
Een website updaten met 1 terminal commando in plaats van het manueel drag en droppen van files in je FTP client.
- Vroeger: open FTP client, upload de files die je gewijzigd hebt (veel werk)
- Nu: cd naar je lokale git repository, commando “git push to_web” en je bent klaar (weinig werk)
Verreisten
- Kennis van werken met de terminal
- SSH access voor de website die je wilt updaten
- Git geïnstalleerd hebben op je systeem (http://git-scm.com/)
- Een lege account bij je host om te testen (je kan dit ook met een bestaande account proberen maar neem zeker eerst een backup)
Deze tutorial is geschreven vanuit het standpunt van een OSX-gebruiker. Het proces kan mogelijk lichtjes verschillen voor een Linux-gebruiker (voor Windows zou ik het niet weten).
Nota: dit lijkt veel werk maar eens je het onder de knie hebt is het echt wel gemakkelijk. Eén keer een beetje werk, en daarna veel tijdswinst.
Stap 1: lokaal een git repo aanmaken
Je kan een bestaande repository gebruiken maar om deze methode eens uit te proberen volg je best de stappen uit deze tutorial.
Open een nieuw terminal venster.
Maak een directory in je homedir.
wolf@wolf:~> mkdir git_test
Verander je directory naar de net aangemaakte directory.
wolf@wolf:~> cd git_test
Maak daar een nieuwe file aan.
wolf@wolf:~/git_test> touch index.html
Open die file met je een text editor (Textmate, Vim, emacs, pico, etc…). Om het makkelijk te houden gebruiken we pico:
wolf@wolf:~/git_test> pico index.html
Typ nu wat je wil schrijven
Hello!
En druk CTRL+X om pico te exiten, Y (YES) om je wijzigingen op te slaan en ENTER om pico te exiten.
(Eerlijk gezegd kan je al deze bovenstaande stappen overslaan, naar Finder gaan, daar een map aanmaken, in die map een file index.html zetten en daaarin de tekst “Hello!” plaatsen, maar kom, dit is een test of je een beetje met je terminal kan werken)
Initialiseer nu de git repo:
wolf@wolf:~/git_test> git init
Je krijgt een bericht dat dat gelukt is:
Initialized empty Git repository in /Users/wolf/git_test/.git/
Voeg alle files toe
wolf@wolf:~/git_test> git add .
En commit deze:
wolf@wolf:~/git_test> git commit -m "My first commit"
Voila. Op naar de server!
Stap 2: git repo op de server maken
Log via SSH in op je server.
ssh user@servername.domain.com
Er wordt om je wachtwoord gevraagd. Vul dit in.
Je ziet het welkombericht van je server
Linux chroom 2.6.18-domu #6 SMP Mon Feb 11 10:20:19 CET 2008 i686
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 9 14:37:31 2009 from d51530512.access.telenet.be
Maak in je homedir een nieuwe directory aan
$ mkdir git_test.git
En verander je directory daarnaar:
$ cd git_test.git
Dan maak je daar een git repository zonder work tree:
$ git init --bare
Je krijgt een success message:
Initialized empty Git repository in /path
Voor de volgende stappen veronderstel ik dat je directory structuur er zo uitziet:
~
default_www
git_test.git
Je hebt (1) een map die default_www heet en die ingesteld is als de DocumentRoot van je website en (2) een andere folder die een “bare” git repo bevat buiten je DocumentRoot.
Deze git repository op onze server heeft geen working tree. Om ons doel te bereiken moeten we nog een aantal zaken instellen in de git config van deze repo.
Verander je directory naar de git_test.git directory als je er nog niet bent:
$ cd git_test.git
De eerste instelling is waar je DocumentRoot juist staat, in dit geval dus:
git config core.worktree /home/accountname/default_www
Dan
$ git config core.bare false
en
$ git config receive.denycurrentbranch ignore
Daarna definiëren we een “post-receive” hook, hierin staat wat git moet doen nadat er gepusht wordt.
Open de file hooks/post-receive met een text editor in je terminal:
$ pico hooks/post-receive
En we maken post-receive executable met chmod:
$ chmod +x hooks/post-receive
Goed.
3. Lokale git repo naar server repo pointen
Terug op onze lokale computer cd’en we naar onze test git repo:
wolf@wolf:~> cd git_test
Daar voegen we een remote locatie toe:
wolf@wolf:~> git remote add to_web ssh://user@name.of.server.com/path/to/git_test.git
(vul het path in naar de plaats waar je de folder git_test.git hebt aangemaakt)
Dan pushen we de master branch naar onze remote locatie:
wolf@wolf:~> git push to_web +master:refs/heads/master
(Er wordt gevraagd om je wachtwoord tenzij je je SSH keys gebruikt)
Afhankelijk van de grootte van de website kan dit even duren.
En vanaf dan kan je je website updaten met het simpele commando:
wolf@wolf:~> git push to_web
Bekijk je website en als alles goed gegaan staat je
Hoera! Nooit meer de FTP client openen!
(Ik heb dit oorspronkelijk geleerd van dit artikel, alle credits dus naar meneer Abhijit Menon-Sen. Voor meer gedetailleerde info, bvb. waarom je de commands core.bare false en receive.denycurrentbranch ignore in je config moet steken, kan je best daar terecht)
3 reacties op “Websites updaten met git”
Reacties gesloten
Het is niet meer mogelijk om reacties te geven op dit bericht. Na plaatsing is het gedurende 2 weken mogelijk om te reageren. Dit om de kwaliteit van de uiteindelijke post hoog te houden en spam tegen te gaan. Mocht je toch nog (persoonlijk) willen reageren, zie de contactpagina.
Is capistrano niet een pak handiger? Dat dit perfect met php of statische html projecten kan, bewijst deze blogpost: http://www.simplisticcomplexity.com/2006/08/16/automated-php-deployment-with-capistrano/
Met die tutorial heb ik eens een avond zitten prutsen zonder resultaat, het kan zijn hoor, maar ik krijg cap niet werkende.
(Binnenkort misschien nog eens proberen :))
Erg handig! Voorlopig werk ik nog met subversion (
svn upe.d.), maar van zodra m’n host ook git ondersteunt wil ik zeker switchen.