== Update Centrale Git Repository == Deze pagina gaat over hoe 'git loscweb Breda' vanaf een centrale plaats te gebruiken. Doel is ervaring met `git` op te bouwen. Te lezen in combinatie met link:maint.html[Site onderhoud] === git === Git, link:http://foo.co.nz/git[git] , is een source code management programma. Installeren zul je als `root` doen door bijvoorbeeld apt-get install git-core of eventueel yum install git gedaan hebben. === Verdere software === Om bij de centrale plaats te kunnen komen, is een `ssh client` nodig. In de regel zal die aanwezig zijn op een GNU of BSD computer. === Clone === Commando git clone cp@november.losc.nl:~/Breda/loscweb loscweb_cp Daarbij is `cp` een accountnaam, waarvan het wachtwoord `cp` was. Log in gebeurd sinds maart 2014 op basis van ssh-keys. Tot aan de dubbele punt, `november.losc.nl`, is de server waar het gebeurd. Het transport protocol is `ssh`. De 'SSH fingerprint' van `november` is 5e:7d:a0:24:e4:fb:f8:4a:99:e2:ac:3b:16:43:41:32. Na de dubbele punt, `~/Breda/loscweb`, is waar de (centrale) repository staat. En `loscweb_cp` is de naam van directory waar jouw repository komt. Voorbeeld: stappers@weiss:/usr/src $ git clone cp@november.losc.nl:~/Breda/loscweb loscweb_cp Cloning into loscweb_cp... The authenticity of host 'november.losc.nl (77.72.145.149)' can't be established. RSA key fingerprint is 5e:7d:a0:24:e4:fb:f8:4a:99:e2:ac:3b:16:43:41:32. cp@november.losc.nl's password: remote: Counting objects: 1211, done. remote: Compressing objects: 100% (1000/1000), done. remote: Total 1211 (delta 779), reused 342 (delta 204) Receiving objects: 100% (1211/1211), 181.99 KiB, done. Resolving deltas: 100% (779/779), done. stappers@weiss:/usr/src $ cd loscweb_cp === Pull === M.b.v. van `git pull` haal je (alleen) wijzigingen op. stappers@weiss:/usr/src/loscweb_cp $ git pull Password: remote: Counting objects: 7, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 3), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From cp@november.losc.nl:~/Breda/loscweb 3c65181..d446110 master -> origin/master Updating 3c65181..d446110 Fast forward src/updatecprepos.txt | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletions(-) stappers@weiss:/usr/src/loscweb_cp $ === edit, compile, check === Of en wat je wilt wijzigingen is een uitdaging die je zelf aan moet gaan. 'compile' gaat m.b.v. `make`. Bij 'check' gaat het om uit te vinden of de verandering ook echt de gewenste verbetering is. Het zijn 'geen git handelingen'. === Commit === Toevoegen aan je eigen repository gaat in twee stappen. * m.b.v. `git add foo.txt` zeg je dat bestand 'foo.txt' toegevoegd moet worden. * m.b.v. `git commit` gaat het daadwerkelijk toegevoegd worden. Er wordt dan een `editor` opgestart. Het is de bedoeling dat je dan een goede beschrijving van je wijzigingen opgeeft. Conventie is 1 enkele regel en (eventueele) verdere toelichting pas na 1 lege regel. stappers@weiss:/usr/src/loscweb_cp $ git add src/updatecprepos.txt stappers@weiss:/usr/src/loscweb_cp $ git commit IN_EDITOR src/updatecprepos.txt: commit voorbeeld Een git commit bestaat uit twee stukken. Een 'wat toevoegen' en 'beschrijving' UIT_EDITOR [master 5c4e782] src/updatecprepos.txt: commit voorbeeld 1 files changed, 35 insertions(+), 1 deletions(-) stappers@weiss:/usr/src/loscweb_cp $ === Push === Opdringen van jouw commits naar een andere repository gaat m.b.v. `git push`. Het zeldzame van `cp@november.losc.nl` is, dat ie niet kieskeurig is. Ga a.u.b. wel respectvol om met die eigenschap. `git push` is een privilege! Voorbeeld: stappers@weiss:/usr/src/loscweb_cp $ git push Password: Counting objects: 18, done. Compressing objects: 100% (14/14), done. Writing objects: 100% (14/14), 1.85 KiB, done. Total 14 (delta 6), reused 0 (delta 0) To cp@november.losc.nl:~/Breda/loscweb 315508f..e9c5339 master -> master stappers@weiss:/usr/src/loscweb_cp $ === failed to push some refs === Mocht de 'push' niet lukken, dan is het de moeite waard om eerst een pull te doen. stappers@viggo:/usr/src/loscweb_cp $ git push Password: To cp@november.losc.nl:~/Breda/loscweb ! [rejected] master -> master (non-fast forward) error: failed to push some refs to 'cp@november.losc.nl:~/Breda/loscweb' stappers@viggo:/usr/src/loscweb_cp $ git pull Password: remote: Counting objects: 7, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 3), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From cp@november.losc.nl:~/Breda/loscweb 4c90189..fd5aa51 master -> origin/master Merge made by recursive. scripts/novembercronjob | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) stappers@viggo:/usr/src/loscweb_cp $ git push Password: Counting objects: 10, done. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 799 bytes, done. Total 6 (delta 4), reused 0 (delta 0) To cp@november.losc.nl:~/Breda/loscweb fd5aa51..cdb5e7f master -> master stappers@viggo:/usr/src/loscweb_cp $ === Makkelijkere Update === Bovenstaan manier heeft als eigenschap dat bij `pull` een wachtwoord moet worden ingevoerd. Bij de manier van link:maint.html[onderhoud] is geen wachtwoord nodig bij een `pull`. Het is mogelijk om het beste van beide werelden te hebben. git push cp@november.losc.nl:~/Breda/loscweb De truuk is in git source tree waar je 'geen wachtwoord' nodig hebt, om daar aan het bestand `.git/config` deze regels toe te voegen: [url "cp@november.losc.nl:~/Breda/loscweb"] pushInsteadOf = "http://losc.nl/Breda/loscweb/.git" Bij een `git pull` is dan geen wachtwoord nodig. Het "lezen" gaat via http. Bij een `git push` gaan de wijziging via de weg waar wel het wachtwoord `cp` nodig is. Hoe komen nu de wijzigingen op de website te staan. link:cp_proces.html[cp_proces].