====== OwnCloud met Git ====== Wilt u bestanden uitwisselen tussen werk en thuis of gezamenlijk bestanden gebruiken in een project? \\ **Met Git is snel een eenvoudige Open Source OwnCloud oplossing te realiseren!** ((Git is een versiebeheersysteem ontwikkeld door Linus Torvalds ten behoeve van het Linux kernel project. Git is Open Source software en voor diverse platformen beschikbaar.)) Naast de Git software op de lokale computer ((In de Tux4u(r)/Penguin Suite is Git ge_i:nstalleerd.)) is het enige dat u nodig heeft een via Internet toegankelijke Unix/Linux computer, waarop u uw eigen Git repository (archief) mag inrichten. In dit voorbeeld gebruiken we een computer van Internet provider XS4ALL, waarop we op "shell" niveau mogen inloggen. ((Shell toegang tot een Unix/Linux computer is standaard in het XS4all Internet abonnement inbegrepen.)) Hoewel Git ontworpen werd t.b.v. software ontwikkeling, is het in brede zin geschikt om verzamelingen bestanden te beheren. \\ Git is echter niet geschikt voor grote binaire bestanden (bijv. video). ((Github.com hanteert: bestanden max: 50-100MB, repository max: 10GB.)) * Gebruik voor grote binaire bestanden "git annex" (Zie: [[https://git-annex.branchable.com/]]). * Maak backups met "rsync". ===== 1. Setup Git server en Git clients ===== ==== 1.1 Setup Git server ==== Gebruik ssh om met gebruikersnaam (bijv. "myname") en wachtwoord in te loggen in de Unix/Linux computer: (("shell.xs4all.nl" is de naam van de XS4ALL Unix/Linux computer.)) $ ssh myname@shell.xs4all.nl The authenticity of host 'shell.xs4all.nl (194.109.21.8)' can't be established. RSA key fingerprint is 8b:16:df:7b:11:7c:78:1c:4d:65:3f:50:71:2b:91:5d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'shell.xs4all.nl,194.109.21.8' (RSA) to the list of known hosts. myname@shell.xs4all.nl's password: Linux xs8.xs4all.nl 3.2.52-xsserver #1 SMP Mon Nov 11 23:22:44 CET 2013 x86_64 Welkom bij XS4ALL ! xs8.xs4all.nl:/home/m/myname$ Maak een "bare" Git repository aan: ((Een bare Git repository heeft alleen een Git repository, geen "working tree" (bestanden). Vergelijk met de Git client setup.)) ((Het is gebruikelijk om de naam van een "bare" Git repository op "**.**git" te laten eindigen.)) $ mkdir mygitrepo.git $ cd mygitrepo.git $ git init --bare Initialized empty Git repository in /home/auto/myname/mygitrepo.git/ En hiermee is onze Git "server" klaar. $ exit Connection to shell.xs4all.nl closed. ==== 1.2 Setup Git client ==== Maak als gewone gebruiker (bijv. "myname") een lege Git repository aan op de lokale computer: $ mkdir mygitrepo $ cd mygitrepo $ git init Initialized empty Git repository in /home/myname/mygitrepo/.git/ Maak de Git server (een z.g. "remote") bekend in deze Git repository: \\ (Als remote naam is hier "xs4all" gekozen.) $ git remote add xs4all ssh://myname@shell.xs4all.nl/~/mygitrepo.git Check het resultaat: $ git remote -v xs4all ssh://myname@shell.xs4all.nl/~/mygitrepo.git (fetch) xs4all ssh://myname@shell.xs4all.nl/~/mygitrepo.git (push) * Verwijder een foute "remote" met: $ git remote rm xs4all Controleer of het mogelijk is om data op te halen van de Git server: $ git fetch xs4all myname@shell.xs4all.nl's password: * Geen foutmeldingen? Dan is het goed! ==== 1.3 Stel Naam en e-mail adres in op de Git client ==== Alvorens we de nieuwe Git repository kunnen gebruiken, moeten we onze identiteit bekendmaken: $ git config --global user.name "Myname" $ git config --global user.email "Myname@myhome.net" ===== 2. Voeg bestanden toe in de Git repository ===== ==== 2.1 Plaats bestanden in de Git "working tree" ==== Voeg bestanden toe in de Git repository van de Git client computer: $ pwd /home/myname/mygitrepo $ cal | tee cal.txt February 2014 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $ echo 'Hello there!' > hello.txt $ ls -l total 8 -rw-r--r-- 1 myname myname 188 Feb 18 10:37 cal.txt -rw-r--r-- 1 myname myname 13 Feb 18 10:38 hello.txt ==== 2.2 Voeg de nieuwe data toe aan de Git repository ==== Nieuwe data wordt aan de Git repository toegevoegd d.m.v. een "Commit".\\ Een Commit is een bij elkaar behorende set van wijzigingen aan de bestanden in de werkruimte. ((De data van de Git repository bevindt zich achter de directory "**.**git")) Schrijf nu de nieuwe Commit in de Git repository: $ git add . $ git commit -m 'Mijn eerste Commit!' [master (root-commit) 8d84f9d] Mijn eerste Commit! 2 files changed, 9 insertions(+) create mode 100644 cal.txt create mode 100644 hello.txt * N.B.: Vergeet de eerste stap "git add **.**" niet!\\ "git commit" neemt alleen de data mee, die in de Git Index is toegevoegd! ((De Git Index indexeert de bestanden.)) * Het is mogelijk de optie "-m 'Commit tekst' " weg te laten. \\ U wordt dan gelanceerd in de "vi" editor om de Commit tekst te schrijven. (Leer eerst vi!) ((De editor wordt bepaald door de variabele $EDITOR.)) * Let op de quotes om de Commit tekst! Met het commando "git log" kunnen we de historie van de een branch bekijken: ((Git werkt met "branches" (vertakkingen). De standaard branch is de (lokale) "master" branch.)) ((commit 88b32f6fb1fea7a0742f9060c5f4daa262e94630 \\ Elke commit heeft zijn eigen unieke ID. Deze ID wordt bepaald door de SHA1 secure hash te berekenen over alle commit data en metadata (cryptografie).)) $ git log commit 88b32f6fb1fea7a0742f9060c5f4daa262e94630 Author: Myname Date: Tue Feb 18 11:57:47 2014 +0100 Mijn eerste Commit! ===== 3. Synchroniseer met de Git server ===== ==== 3.1 Haal data van de Git server op ==== Het commando "git fetch" haalt de data van de Git server: \\ (In dit voorbeeld is er al data op de Git server geplaatst vanuit een andere Git client.) $ git fetch xs4all myname@shell.xs4all.nl's password: warning: no common commits remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From ssh://shell.xs4all.nl/~/mygitrepo * [new branch] master -> xs4all/master Met het commando "git log" kunnen we de historie van de remote branch "xs4all/master" bekijken: ((De van de Git server opgehaalde data wordt in de lokale Git repository opgeslagen in "remote" branches: * [new branch] master -> xs4all/master)) $ git log xs4all/master commit ec6468d43cfbeddd317073224ffee6019dc55c09 Author: Myworkname Date: Mon Feb 17 14:50:58 2014 +0100 Kalender 2014 ==== 3.2 Samenvoegen van lokale en remote data ==== Het commando "git rebase" voegt de lokale data in de Git repository samen met de data van de Git server: ((Het commando "git rebase" plaatst de commits in de actieve branch (master) bovenop de commits van de "xs4all/master" branch.)) $ git rebase xs4all/master First, rewinding head to replay your work on top of it... Applying: Mijn eerste Commit! Met het commando "git log" kunnen we de historie van de actuele branch (master) bekijken: ((De laatste commit in de branch zien we bovenaan. De HEAD (kop) van deze master branch is dus "Mijn eerste Commit!")) $ git log commit 88b32f6fb1fea7a0742f9060c5f4daa262e94630 Author: Myname Date: Tue Feb 18 11:57:47 2014 +0100 Mijn eerste Commit! commit ec6468d43cfbeddd317073224ffee6019dc55c09 Author: Myworkname Date: Mon Feb 17 14:50:58 2014 +0100 Kalender 2014 ===== 4. Actualiseer de Git server ===== Met het commando "git push" zenden we de samengevoegde data naar de Git server: $ git push xs4all master myname@shell.xs4all.nl's password: Counting objects: 5, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 438 bytes, done. Total 4 (delta 0), reused 0 (delta 0) To ssh://myname@shell.xs4all.nl/~/mygitrepo.git ec6468d..88b32f6 master -> master === N.B. Synchroniseer altijd eerst met de Git server! === Wanneer de Git client niet eerst gesynchroniseerd is met de Git server wordt de "git push" door de Git server geweigerd: $ git push xs4all master myname@shell.xs4all.nl's password: To ssh://myname@shell.xs4all.nl/~/mygitrepo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'ssh://myname@shell.xs4all.nl/~/mygitrepo.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. * Ga terug naar stap 3: Voer een "fetch" uit, gevolgd door een "rebase". ===== 5. Gitk en Git Gui ===== ==== 5.1 Gitk: Opvragen van informatie uit de Git repository ==== Met het grafische programma "gitk" kunnen we een actueel overzicht opvragen van de Git repository: $ pwd /home/myname/mygitrepo $ gitk --all & {{ linux:applicaties:git-repo-700.png }} ==== 5.2 Git Gui: Grafische Git manager ==== Vanuit "gitk" kunnen we ook een grafische Git manager starten: File -> Start git gui {{ linux:applicaties:git-gui-600.png }} ===== 6. Meer informatie ===== ^ Links ^^ | [[http://git-scm.com/book/nl]] | Git-scm boek NL | | [[https://www.kernel.org/pub/software/scm/git/docs/user-manual.html]] | Git User's Manual | | [[http://git-scm.com/downloads]] | Git-scm downloads (diverse platformen) | ====== . ====== Copyright (c) 2014 Integrated Services; Tux4u.nl\\ Author: Marjan Waldorp; git/git-owncloud 2014-02-21