Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii....

57
Git Workshop Nederlands Documentation Release 0.1 Dion Dresschers Jun 21, 2017

Transcript of Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii....

Page 1: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop NederlandsDocumentation

Release 0.1

Dion Dresschers

Jun 21, 2017

Page 2: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap
Page 3: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Contents

1 CentOS 7 Installatie 11

2 Git Installatie 17

3 git init & git status 21

4 Git Areas 25

5 Een file aanmaken 27

6 git add & git commit 29

7 git log & git checkout 33

8 git config 35

9 git clone 37

10 git branch (& git checkout) 41

11 git merge & (git log) 45

12 Welkom bij de Git & GitHub Cursus! 51

13 Git 53

i

Page 4: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

ii

Page 5: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Wil je deze cursus stap voor stap kunnen volgen, dan kan je gebruik maken van hetzelfde besturingssysteem dat wijgebruiken, namelijk CentOS 7 (deze is compatibel met Red Hat Enterprise Linux 7).

Heb je geen CentOS 7, maar wel een computer met:

• Windows

• Linux

• MacOS

dan kan je CentOS 7 draaien als virtuele machine in VirtualBox2

VirtualBox is een virtualisatieprogramma zoals VMware Player.

CentOS is een gebouwd van dezelfde code waarvan Red Hat Enterprise Linux gemaakt is. We beginnen met CentOS7 Core3 , wat een vrij kale versie zonder Graphical User Interface (GUI) is. Download zelf de CentOS 7 versie vanhttp://www.centos.org .

Note: Hier vind je de handleiding van VirtualBox.

Je klikt als eerste op ‘New’ om een nieuwe VM te starten.

2 Virtualbox kan gedownload worden van http://virtualbox.org3 CentOS 7 Core kan je onder andere hier downloaden

Contents 1

Page 6: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Note: We gaan altijd uitsluitend af op Engelstalige software.

Daarna typ je CentOS 7 bij ‘Name’. Je ziet dat Red Hat automatisch geselecteerd wordt als besturingssysteem. Ditis een prima keuze.

Klik dan op ‘Next’.

Je kan nu het geheugen selecteren voor de VM. 512MB is prima en kan altijd achteraf nog makkelijk gewijzigdworden. Klik dus op ‘Next’.

Een VM heeft ook een harde schijf (wat eigenlijk een losse file is van de VM).

De keuze ‘Create a virtual hard drive now’ is goed, druk dus op ‘Create’.

Je krijgt daarna de keuze wat voor type virtuele harde schijf je wilt maken. Dit maakt het verplaatsen van een VM vanhet ene virtualisatieprogramma (dus VirtualBox) naar het andere (bv. Microsoft Hyper-V) makkelijker. Je kan als jegeen andere voorkeur hebt, dit gewoon laten staan op ‘VDI’, dus klik op ‘Next’.

2 Contents

Page 7: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

De volgende vraag gaat over of de grootte van virtuele harde schijf bestand net zo groot moet zijn als de gekozengrootte van harde schijf. Standaard wordt niet-beschreven ruimte in de VM niet meegenomen in de grootte van hetharde schijf bestand. Dit is een goede keuze, dus klik op ‘Next’

Hier kan je de grootte van de virtuele harde schijf kiezen. Als je de selectie van de vorige instelling op ‘Dynamicallyallocted’ hebt laten staan, dan kan je de grootte flink groot maken (achteraf wijzigen is wat lastiger). Schuif de knophelemaal naar rechts voor de grootst mogelijke keuze.

Klik nu op ‘Create’ om de VM klaar te maken (deze heeft echter nog geen besturingssysteem).

Selecteer de nieuw gemaakte VM (deze heeft dus de naam ‘CentOS 7’).

Contents 3

Page 8: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Je zet de VM aan door op ‘Start’ te klikken. Je kunt meteen een opstartdisk CD of ISO-file selecteren (waarvan jehet besturingssysteem installeert). Klik hiervoor op het icoontje rechts van de huidige selectie. Navigeer naar de ISOfile-die je van http://centos.org gedownload hebt en druk op ‘Open’. Druk nu ‘Start’ om de VM te starten.

4 Contents

Page 9: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Nu wordt de ISO gestart en kan je de keuze maken om CentOS 7 te installeren door simpel de ‘Enter’-toets in tedrukken.

Contents 5

Page 10: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Je komt nu in het graphische installatiescherm. Het besturingssysteem zelf zal standaard geen GUI bevatten.

Selecteer als taal ‘Engels (United States)’ en klik ‘Continue’.

Klik nu op ‘INSTALLATION DESTINATION’ en vervolgens twee keer de virtuele harde schijf disk die je eerder hebtaangemaakt, zodat je daar een vinkje ziet. Klik dan op ‘Done’ linksboven.

6 Contents

Page 11: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Nu kan je ‘Begin Installation’ drukken om de installatie te beginnen.

Je moet nu een wachtwoord maken voor het ‘root’ account. Het ‘root’ account heeft alle rechten op een systeem.

Klik op ‘ROOT PASSWOORD’ en voer vervolgens een wachtwoord in (plus het wachtwoord om typo’s tevoorkomen). Mocht het geen sterk wachtwoord zijn dan moet je twee keer op ‘done’ drukken om verder te gaan.

Je kan optioneel een tweede account aanmaken door op ‘USER CREATION’ te kiezen.

Contents 7

Page 12: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Selecteer ‘Make this user administrator’, zodat je ook met dit account ‘root’ rechten kan verkrijgen. Vervolgens weer‘Done’ klikken.

Klik ‘Finish configuration’ om het installeren af te ronden.

Als laatste klik je ‘Reboot’ om te herstarten.

Nadat de machine herstart is kan je inloggen met het ‘root’ account of met je eigen gemaakte account.

Wil je van je VM terug naar de huidige machine, dan kan je de rechter CTRL-toets indrukken (dit is standaard ingesteldals de zgn. Host-key). Je beweegt dan met de muis weer naar je huidige systeem terug.

8 Contents

Page 13: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Contents 9

Page 14: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

10 Contents

Page 15: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 1

CentOS 7 Installatie

Nadat je een VM met CentOS 7 hebt aangemaakt moeten we hem nog verder configureren.

Je hebt tijdens de installatie in ieder geval een ‘root’ account aangemaakt met bijbehorend wachtwoord.

Je kan nu inloggen met dit account.

Bij ‘localhost login:’ vul je ‘root’ in, en bij ‘Password:’ uiteraard het wachtwoord.

Waarschijnlijk ben je nu niet verbonden met internet (dit in het geval als je fysieke computer wel verbonden is).

Typ ‘ping 8.8.8.8’ om te kunnen testen of je kan pingen naar een publieke server op het internet.

Typ ‘ip address show’ om je huidige netwerk interfaces te zien inclusief een mogelijk IP adres.

Zoals onder te zien is een ping naar 8.8.8.8 niet succesvol.

11

Page 16: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Verder heb je twee interfaces:

• lo

• enp0s3

De ‘lo’ interface is een lokale interface en kan je negeren. We focussen ons op het andere adres waarmee communicatiemet andere machines mogelijk is. Het is goed mogelijk dat de inteface op jouw VM een andere benaming heeft.

De reden dat deze interace geen IP address is omdat deze standaard uit staat. Je kan het opstartscript voor deze interacebekijken via ‘cat /etc/sysconfig/network-scripts/ifcfg-enp0s3’.

Je ziet hier staan ‘ONBOOT=no’.

We gaan nu het bestand file wijzigen in het programma ‘vi’ (of beter gezet ‘vim’).

Typ hiervoor ‘vi /etc/sysconfig/network-scripts/ifcfg-enp0s3’.

Warning: Zorg dat je ‘root’ rechten hebt zodat je de file kan veranderen. Hiervoor moet je ‘root’ zijn, of ‘sudo’typen voor elk commando om deze rechten te krijgen.

Druk dan ‘i’ om naar ‘insert’ mode te gaan. Gebruik dan de pijltjes toetsen om ‘ONBOOT=no’ te veranderen in‘ONBOOT=yes’. Daarna druk je de ESC-toets, vervolgd door ‘wq’ en dan de ENTER-toets.

Je kan nu het netwerk herstarten met systemctl restart network.service. Een ander alternatief (de bottebijl manier) is om de VM te herstarten met systemctl reboot.

Je ziet nu dat we wel een IP adres hebben op onze netwerk interface ‘enp0s3’ met IP address ‘10.0.2.15’.

We kunnen ook pingen naar 8.8.8.8.

12 Chapter 1. CentOS 7 Installatie

Page 17: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Je kan ook pingen naar je eigen interface met ping 10.0.2.15.

Probeer je echter te pingen naar 10.0.2.15 vanaf je eigen computer (dus niet vanuit de VM), dan zie je dat het niet lukt.

dionysos:~$ ping 10.0.2.15PING 10.0.2.15 (10.0.2.15) 56(84) bytes of data.From 10.0.2.200 icmp_seq=1 Destination Host UnreachableFrom 10.0.2.200 icmp_seq=2 Destination Host UnreachableFrom 10.0.2.200 icmp_seq=3 Destination Host UnreachableFrom 10.0.2.200 icmp_seq=4 Destination Host Unreachable^C--- 10.0.2.15 ping statistics ---4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999mspipe 4

Ga nu vanuit VirtualBox naar ‘Menu’, ‘Settings’, ‘Network’ en klik daar op ‘Port Forwarding’.

13

Page 18: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Klik daar op het icoontje met het plus-teken. En vul onderstaande gegevens in:

14 Chapter 1. CentOS 7 Installatie

Page 19: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Dit betekent dat als je naar je eigen machine verbindt (bv. via IP adres 127.0.0.1) met poort 2222 dat je dan met deVM verbindt met poort 22. Dit is de standaard poort van SSH (Secure SHell). Je kan nu dus verbinden via SSH (eencommandoregel verbinding) met de VM.

Note: In Linux en hoogstwaarschijnlijk in MacOS zit standaard een SSH programma. Het kan zijn dat Windows dezeniet heeft. In dat geval kan je PuTTY downloaden waarmee je wel via SSH verbinding kan maken.

dion@dionysos:~$ ssh 127.0.0.1 -p2222The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.ECDSA key fingerprint is ed:12:0c:d0:b4:c9:f3:d0:8c:46:47:66:55:46:c5:86.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known [email protected]'s password:

Als je geen naam invoert (zoals boven), dan wordt de naam gebruikt waar je op dat moment op je eigen fysiekecomputer bent ingelogd. In bovenstaand voorbeeld is dat ‘dion’. Wil je meteen met ‘root’ inloggen geef dat dan mee:

dionysos:~$ ssh [email protected] [email protected]'s password:X11 forwarding request failed on channel 0Last login: Fri Feb 13 07:47:19 2015 from 10.0.2.2[root@localhost ~]#

15

Page 20: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

16 Chapter 1. CentOS 7 Installatie

Page 21: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 2

Git Installatie

Log eerst in op je VM:

dion@dionysos:~$ ssh 127.0.0.1 [email protected]'s password:X11 forwarding request failed on channel 0[dion@localhost ~]$

Daar kijk je of git al geinstalleerd is:

[dion@localhost ~]$ git-bash: /usr/bin/git: No such file or directory

Dan installeer ‘git’ via het ‘yum’ installeerpakket:

dion@localhost ~]$ yum install gitLoaded plugins: fastestmirrorYou need to be root to perform this command.[dion@localhost ~]$ sudo yum install gitLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile

* base: ftp.nluug.nl

* extras: mirror.1000mbps.com

* updates: mirror.1000mbps.comResolving Dependencies--> Running transaction check---> Package git.x86_64 0:1.8.3.1-4.el7 will be installed--> Processing Dependency: perl-Git = 1.8.3.1-4.el7 for package: git-1.8.3.1-4.el7.→˓x86_64--> Processing Dependency: perl(Git) for package: git-1.8.3.1-4.el7.x86_64--> Running transaction check---> Package perl-Git.noarch 0:1.8.3.1-4.el7 will be installed--> Finished Dependency Resolution

Dependencies Resolved

17

Page 22: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

===================================================================================================================================================================================================================Package Arch→˓ Version Repository→˓ Size===================================================================================================================================================================================================================Installing:git x86_64→˓ 1.8.3.1-4.el7 base→˓ 4.3 MInstalling for dependencies:perl-Git noarch→˓ 1.8.3.1-4.el7 base→˓ 52 k

Transaction Summary===================================================================================================================================================================================================================Install 1 Package (+1 Dependent package)

Total download size: 4.4 MInstalled size: 22 MIs this ok [y/d/N]: yDownloading packages:(1/2): perl-Git-1.8.3.1-4.el7.noarch.rpm→˓

→˓ | 52 kB 00:00:00(2/2): git-1.8.3.1-4.el7.x86_64.rpm→˓

→˓ | 4.3 MB 00:00:00--------------------------------------------------------------------------------------→˓------------------------------------------------------------------------------------→˓-----------------------------------------Total→˓

→˓ 5.9 MB/s | 4.4 MB 00:00:00Running transaction checkRunning transaction testTransaction test succeededRunning transaction

Installing : git-1.8.3.1-4.el7.x86_64→˓

→˓ 1/2Installing : perl-Git-1.8.3.1-4.el7.noarch

→˓

→˓ 2/2Verifying : perl-Git-1.8.3.1-4.el7.noarch

→˓

→˓ 1/2Verifying : git-1.8.3.1-4.el7.x86_64

→˓

→˓ 2/2

Installed:git.x86_64 0:1.8.3.1-4.el7

Dependency Installed:perl-Git.noarch 0:1.8.3.1-4.el7

Complete!

18 Chapter 2. Git Installatie

Page 23: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

[dion@localhost ~]$

Dan geef je het eerste git commando. Je ziet meteen dat er hulp tegemoetkomt:

dion@localhost ~]$ gitusage: git [--version] [--help] [-c name=value]

[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path][-p|--paginate|--no-pager] [--no-replace-objects] [--bare][--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]<command> [<args>]

The most commonly used git commands are:add Add file contents to the indexbisect Find by binary search the change that introduced a bugbranch List, create, or delete branchescheckout Checkout a branch or paths to the working treeclone Clone a repository into a new directorycommit Record changes to the repositorydiff Show changes between commits, commit and working tree, etcfetch Download objects and refs from another repositorygrep Print lines matching a patterninit Create an empty Git repository or reinitialize an existing onelog Show commit logsmerge Join two or more development histories togethermv Move or rename a file, a directory, or a symlinkpull Fetch from and merge with another repository or a local branchpush Update remote refs along with associated objectsrebase Forward-port local commits to the updated upstream headreset Reset current HEAD to the specified staterm Remove files from the working tree and from the indexshow Show various types of objectsstatus Show the working tree statustag Create, list, delete or verify a tag object signed with GPG

'git help -a' and 'git help -g' lists available subcommands and someconcept guides. See 'git help <command>' or 'git help <concept>'to read about a specific subcommand or concept.

19

Page 24: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

20 Chapter 2. Git Installatie

Page 25: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 3

git init & git status

We gaan eerst naar onze home directory (~) en maken daar een lege directory.

[dion@localhost ~]$ cd ~[dion@localhost ~]$ mkdir repo_een[dion@localhost ~]$ cd repo_een

Het is uiteraard een lege directory, dus er zitten geen bestanden in.

[dion@localhost repo_een]$ ls -latotal 4drwxrwxr-x. 2 dion dion 6 Feb 18 08:01 .drwx------. 3 dion dion 4096 Feb 18 08:01 ..

Vervolgens gaan we kijken wat de status van git is met git status

[dion@localhost repo_een]$ git statusfatal: Not a git repository (or any parent up to mount point /home)Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

We krijgen de melding dat de directory helemaal geen git repository is.

We kunnen een git repository initialiseren met git init.

[dion@localhost repo_een]$ git initInitialized empty Git repository in /home/dion/repo_een/.git/

Als we nu naar de status kijken zien we dat het nu wel een repository is (op de ‘branch’ die standaard ‘master’ heet).Er zijn alleen nog geen wijzigingen in de directory die ‘commit’ kan worden.

[dion@localhost repo_een]$ git status# On branch master## Initial commit#nothing to commit (create/copy files and use "git add" to track)

21

Page 26: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Kijken we in de directory dan zien we nu de verborgen directory ‘.git’ staan die net aangemaakt is.

[dion@localhost repo_een]$ ls -la

total 8drwxrwxr-x. 3 dion dion 25 Feb 18 08:01 .drwx------. 3 dion dion 4096 Feb 18 08:01 ..drwxrwxr-x. 7 dion dion 4096 Feb 18 08:01 .git

Hierin staan weer een aantal git bestanden. We willen de filestructuur duidelijk maken met het commando ‘tree’, maardeze is standaard niet geinstalleerd.

[dion@localhost repo_een]$ tree .git-bash: tree: command not found

We installeren yum dan ook via ‘yum install tree’.

[dion@localhost repo_een]$ sudo yum install tree[sudo] password for dion:Loaded plugins: fastestmirrorbase | 3.→˓6 kB 00:00:00extras | 3.→˓4 kB 00:00:00updates | 3.→˓4 kB 00:00:00Loading mirror speeds from cached hostfile

* base: mirror.nl.webzilla.com

* extras: ftp.nluug.nl

* updates: mirror.nl.webzilla.comResolving Dependencies--> Running transaction check---> Package tree.x86_64 0:1.6.0-10.el7 will be installed--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================Package Arch Version→˓Repository Size========================================================================================================Installing:tree x86_64 1.6.0-10.el7 base→˓ 46 k

Transaction Summary========================================================================================================Install 1 Package

Total download size: 46 kInstalled size: 87 kIs this ok [y/d/N]: yDownloading packages:tree-1.6.0-10.el7.x86_64.rpm |→˓46 kB 00:00:00Running transaction checkRunning transaction testTransaction test succeededRunning transaction

22 Chapter 3. git init & git status

Page 27: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Installing : tree-1.6.0-10.el7.x86_64→˓ 1/1Verifying : tree-1.6.0-10.el7.x86_64

→˓ 1/1

Installed:tree.x86_64 0:1.6.0-10.el7

Complete!

Nu zien we netjes de opbouw van de ‘.git’ directory:

[dion@localhost repo_een]$ tree .git.git|-- branches|-- config|-- description|-- HEAD|-- hooks| |-- applypatch-msg.sample| |-- commit-msg.sample| |-- post-update.sample| |-- pre-applypatch.sample| |-- pre-commit.sample| |-- prepare-commit-msg.sample| |-- pre-push.sample| |-- pre-rebase.sample| `-- update.sample|-- info| `-- exclude|-- objects| |-- info| `-- pack`-- refs

|-- heads`-- tags

9 directories, 13 files[dion@localhost repo_een]$

23

Page 28: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

24 Chapter 3. git init & git status

Page 29: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 4

Git Areas

In git heb je verschillende stadia waarin je kan werken

1. Working Directory (hierin doe je alle wijzigingen)

2. Staging Area (je zet de wijzigingen klaar in de staging area met ‘git add’)

3. Git Directory (van de staging area zet je ze in de Git Directory met ‘git commit’)

Op de volgende onderwerpen gaan we door alle areas heen met ‘git add’ en ‘git commit’.

25

Page 30: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

26 Chapter 4. Git Areas

Page 31: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 5

Een file aanmaken

We gaan naar onze repository:

dion@localhost ~]$ cd ~/repo_een

Daarin maken met het tekstbewerkigsprogramma vi (eigenlijk vim) het bestand ‘show_dir.sh’.

[dion@localhost repo_een]$ vi show_dir.sh

In vim kan je met de ‘ESC’-toets naar de verschillende modi.

Nadat je ‘ESC’ hebt ingedrukt, kan je met de ‘i’-toets text invoegen.

Gebruik je ‘ESC’ en typ je daarna ‘:wq’ dan schrijf je het bestand weg (de ‘w’ van ‘Write’) en sluit je vim af (de ‘q’van ‘Quit’).

Zorg dat deze tekst in het bestand staat en sluit dan af.

#!/bin/bash

echo "Dit is de directory:"

ls -la

Je hebt nu een script gemaakt. Je kan de rechten van script zien met ‘ls -l’:

[dion@localhost repo_een]$ ls -l show_dir.sh-rw-rw-r--. 1 dion dion 49 Feb 23 18:29 show_dir.sh

Je ziet ‘-rw-rw-r–‘ staan. De eerste ‘rw-‘ betekent dat de gebruiker ‘dion’ (dit is de eerste ‘dion’), de rechten heeftvan ‘Read’, ‘Write’ maar geen ‘eXecute’. We gaan de rechten nu wijzigen met het commando ‘chmod’ (van CHangeMODify), waarbij we de ‘u’ (User), de rechten geven van ‘x’ (eXecute):

[dion@localhost repo_een]$ chmod u+x show_dir.sh

We kunnen nu zien dat deze rechten gewijzigd zijn:

27

Page 32: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

[dion@localhost repo_een]$ ls -l show_dir.sh

-rwxrw-r--. 1 dion dion 49 Feb 23 18:29 show_dir.sh

We hebben nu de rechten om het bestand uit te voeren, echter moet je de directory daarbij meegeven. Hieronder is dusniet de juiste manier:

[dion@localhost repo_een]$ show_dir.sh-bash: show_dir.sh: command not found

We kunnen wel de huidige dirctory aangeven met een punt ‘.’ en een schuine streep ‘/’.

[dion@localhost repo_een]$ ./show_dir.shDit is de directory:total 12drwxrwxr-x. 3 dion dion 47 Feb 23 18:29 .drwx------. 3 dion dion 4096 Feb 18 08:01 ..drwxrwxr-x. 7 dion dion 4096 Feb 23 18:26 .git-rwxrw-r--. 1 dion dion 49 Feb 23 18:29 show_dir.sh

28 Chapter 5. Een file aanmaken

Page 33: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 6

git add & git commit

We hebben nu dus een nieuwe file aangemaakt.

dion@localhost repo_een]$ ls -latotal 8drwxrwxr-x. 3 dion dion 35 Mar 13 06:46 .drwx------. 3 dion dion 94 Mar 13 06:46 ..drwxrwxr-x. 8 dion dion 4096 Mar 13 06:48 .git-rwxrw-r--. 1 dion dion 49 Feb 23 18:29 show_dir.sh

Als we nu een ‘git status’ uitvoeren zien we dat de ‘show_dir.sh’ file wel in de Working Directory staat, maar ‘un-tracked’ is. We kunnen de file van de Working Directory naar de ‘Staging Area’ brengen met ‘git add’.

dion@localhost repo_een]$ git status# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## show_dir.shnothing added to commit but untracked files present (use "git add" to track)

Dit zullen we dan ook maar doen.

Je kan met ‘git add show_dir.sh‘ alleen dit specifieke bestand naar de Staging Area brengen, met ‘git add .’ doe je ditvoor alle bestanden in die directory.

dion@localhost repo_een]$ git addNothing specified, nothing added.Maybe you wanted to say 'git add .'?[dion@localhost repo_een]$ git add .

We kunnen nu zien dat een nieuwe file die je weer kan ‘unstagen’ met ‘git rm –chached show_dir‘

29

Page 34: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

[dion@localhost repo_een]$ git status

# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: show_dir.sh#

Nu de file in de Staging Area zit, kan je hem naar de Git Repostory brengen met ‘git commit’. Als je dit doet wordtmeteen een vim-achtige teksteditor geopenend waar je commentaar voor de wijzigingen in kan zetten. Je sluit hetcommentaar af met ESC-toets, dan ‘:wq’ (zelfde als vim).

Een andere optie is om het commentaar meteen in de commandoregel toe te voegen met:

git commit -m "Nieuw bash script gemaakt."

Je ziet nu dat alles ‘gecommit’ is en dat er geen wijzigingen zijn in de Working Directory.

dion@localhost repo_een]$ git status# On branch masternothing to commit, working directory clean

We wijzigen nog een keer met ‘vim’ het door ons gemaakte script zodat ‘ls la’, ‘ls -lahi’ wordt.

Met ‘git status’ zie je nu de volgende informatie:

[dion@localhost repo_een]$ git status# On branch master# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: show_dir.sh#no changes added to commit (use "git add" and/or "git commit -a")

Je krijgt nu de hint dat je het commando ‘git commit -a’ kan gebruiken. Dit is een vervanging van een losse ‘git add’en daarna ‘git commit’.

Note: Git geeft altijd netjes uitleg wat het gedaan heeft, wat er mis gaat of wat je kan doen. Lees daarom dezefeedback zorgvuldig.

Dit doen we dus maar braaf en voegen meteen met ‘-m’ commentaar toe.

[dion@localhost repo_een]$ git commit -am "Ook human-readible en inodes toegevoegd"[master 349bf47] Ook human-readible en inodes toegevoegdCommitter: Dion Dresschers <[email protected]>

Your name and email address were configured automatically basedon your username and hostname. Please check that they are accurate.You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"git config --global user.email [email protected]

30 Chapter 6. git add & git commit

Page 35: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

1 file changed, 1 insertion(+), 1 deletion(-)

Je ziet boven dat er 1 file gewijzigd is. Je hebt ‘ls -la’ veranderd in ‘ls -lahi’. Git registeert dit als eerst de oude regelweghalen (1 deletion) en vervolgens de nieuwe (gewijzigde) regel toevoegen (1 insertion). Daarnaast nog de meldingdat onze naam en e-mailadres nog niet ingevuld is en netjes de uitleg hoe dit opgelost kan worden (dit gaan we laternog doen).

31

Page 36: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

32 Chapter 6. git add & git commit

Page 37: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 7

git log & git checkout

We gaan nu het versiebeheer van Git uitproberen, door wijzigingen terug te draaien.

Met ‘git log’ kan je de geschiedenis van de ‘commits’ bekijken. Je ziet hieronder onze twee ‘commits’ met decommentaren en een commit identificatie nummer.

[dion@localhost repo_een]$ git logcommit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt

We gaan een ‘checkout’ draaien zodat in de working directory de wijzigen die we in het script hebben gedaan wordenterug gedraaid. Dit kan met ‘git checkout’ en daarna het identificatienummer (minimaal de eerste 4 cijfers, mits dithet nummer uniek maakt).

dion@localhost repo_een]$ git checkout e0d1Note: checking out 'e0d1'.

You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at e0d1981... Nieuw bash script gemaakt

33

Page 38: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Je bent in feite teruggegaan in de tijd, maar ook de toekomst bestaat nog. Wil je vanaf waar je nu bent wijzigingendoorvoeren dan kan je een branch aanmaken zoals uitgelegd, maar we gaan branches later uitleggen.

We kunnen met ‘cat’ de inhoud van de file zien en we zien dat onze oude staat van de file bewaard is gebleven.

[dion@localhost repo_een]$ cat show_dir.sh

#!/bin/bash

echo "Dit is de directory:"

ls -la

Als we meteen een ‘git add’ doen, dan zie je dat er niks gewijzigd is:

dion@localhost repo_een]$ git commit -am "Na de terugdraai"# HEAD detached at e0d1981nothing to commit, working directory clean

De veranderingen die we naderhand hebben gemaakt (dus de wijziging van ‘-la’ naar ‘lahi’) zijn we ook niet kwijt allijkt het er in eerste instantie wel op via ‘git log’:

dion@localhost repo_een]$ git logcommit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Wil je ook de toekomst weer zien dan gebruik je ‘git log –all’. Je zou ervoor kunnen kiezen om met ‘git checkout34bf’ weer Back to the Future te gaan.

dion@localhost repo_een]$ git log --allcommit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt

34 Chapter 7. git log & git checkout

Page 39: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 8

git config

Tot nu hebben we Git voornamelijk op onze eigen machine gebruikt. Op het moment dat je met meerdere personenin dezelfde repository gaat werken of als je repositories op internet gaat zetten is het beter om netjes een identiteit teplaatsen. Dit doe je met ‘git commit’.

dion@localhost repo_een]$ git log --allcommit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt

We zien dat nu de config gezet is op basis van je username in CentOS. We gaan dit nu aanpassen met ‘git config’, voorde ‘user.name’ en ‘user.email’:

dion@localhost repo_een]$ git config --global user.name "Dion H.J. Dresschers"[dion@localhost repo_een]$ git config --global user.email "[email protected]"

We kunnen nu als bonus een ‘commit’ doen om de gebruikersnaam te gebruiken (dit commando wordt altijd genoemdna een ‘commit’ als je gebruikersnaam nog niet gezet is).

[dion@localhost repo_een]$ git commit --amend --reset-author

Je ziet nu dat de gebruiker aangepast is.

dion@localhost repo_een]$ git log --allcommit 7bd88917abcb42626f541d3d7e884a19f1069a3cAuthor: Dion H.J. Dresschers <[email protected]>Date: Fri Mar 13 10:45:04 2015 -0400

35

Page 40: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Gebruikersnaam gewijzigd

commit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt

De configuratie instellingen zoals je naam kunnen in verschillende files gedefinieerd zijn. Hieronder zie je die filesgeordend per prioriteit (waar ‘1’ de voorkeur heeft boven ‘2’).

1. Repository Settings ‘repository/.git/config’

2. User Settings ‘~/.gitconfig’

3. Global Settings ‘/etc/gitconfig’

Gaan we nu kijken in onze eigen settings, dan zien we dat voor de Repository Settings (dit is dus de file in de repostoryzelf) onderstaande instelling staan. Deze Repository Settings hebben dus de hoogste prioriteit.

dion@localhost ~]$ cat ~/repo_een/.git/config[core]

repositoryformatversion = 0filemode = truebare = falselogallrefupdates = true

[user]name = Dion H.J. Dresschersemail = [email protected]

Hierboven zien we dat ons commando ‘git config’ deze file heeft aangepast.

Deze heeft dus prioriteit boven de onderstaande user settings (dit is dus de setting in de user home directory).

[dion@localhost ~]$ cat ~/.gitconfig[user]name = Dion H.J. Dresschersemail = [email protected]

Voor de Global Settings zien we dat deze file standaard niet is aangemaakt en dat ons ‘git config’ commando weiniguitgericht heeft.

[dion@localhost ~]$ cat /etc/gitconfigcat: /etc/gitconfig: No such file or directory

36 Chapter 8. git config

Page 41: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 9

git clone

We hebben in dit voorbeeld onze eigen repository gemaakt. Je kan echter ook bestaande repositories op anderemachines ‘clonen’ naar je eigen computer.

Repositories kunnen op verschillende plaatsen staan:

1. Op je eigen machine (dit hebben we in de vorige voorbeelden gedaan).

2. Gehost op GitHub (deze is gratis voor Open Source projecten)

3. Een GitHub alternatief.

4. Een eigen git server, bijvoorbeeld via Gitolite.

We gaan nu een Open Source project binnenhalen (‘clonen’) van GitHub.

We zoeken iets met de standaard Linux scripttaal Bash, naar iets wat kan backuppen.

In de repositories gebruik de zoektermen ‘bash backup’

37

Page 42: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

De eerste hit ziet er wel interessant uit, dus we klikken op ‘Pricetx/backup’:

38 Chapter 9. git clone

Page 43: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Rechts zie je bij ‘HTTPS clone URL’ de URL staan die je kan gebruiken om te ‘clonen’. Kopieer deze URL want dezegaan we hierna gebruiken. Heb je eenmaal een GitHub account (en heb je een ‘ssh-key’ aangemaakt en geuploaded),dan kan je het het ook copieren via SSH, zelf je repositories plaatsen, en wijzigingen ‘pushen’.

Eerst kijken we welke repositories we hebben (we zien alleen de repo die we zelf gemaakt hebben).

dion@localhost ~]$ cd ~[dion@localhost ~]$ ls -ltotal 0drwxrwxr-x. 3 dion dion 35 Mar 13 10:43 repo_een

39

Page 44: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

We gaan nu ons uit GitHub gezochte repository ‘clonen’:

[dion@localhost ~]$ git clone https://github.com/Pricetx/backup.gitCloning into 'backup'...remote: Counting objects: 251, done.remote: Total 251 (delta 0), reused 0 (delta 0), pack-reused 251Receiving objects: 100% (251/251), 39.67 KiB | 0 bytes/s, done.Resolving deltas: 100% (143/143), done.

We zien nu dat een ‘backup’ directory is aangemaakt.

[dion@localhost ~]$ ls -ltotal 4drwxrwxr-x. 3 dion dion 4096 Mar 16 06:47 backupdrwxrwxr-x. 3 dion dion 35 Mar 13 10:43 repo_een

We zien dat de directory gevuld is met bash scripts (*.sh) en een ‘.git’ directory:

[dion@localhost ~]$ cd backup[dion@localhost backup]$ ls -latotal 40drwxrwxr-x. 3 dion dion 4096 Mar 16 06:47 .drwx------. 5 dion dion 4096 Mar 16 06:47 ..-rw-rw-r--. 1 dion dion 2501 Mar 16 06:47 backup.cfg-rw-rw-r--. 1 dion dion 4448 Mar 16 06:47 backup.sh-rw-rw-r--. 1 dion dion 4267 Mar 16 06:47 deleteoldbackups.shdrwxrwxr-x. 8 dion dion 4096 Mar 16 06:47 .git-rw-rw-r--. 1 dion dion 1379 Mar 16 06:47 LICENSE-rw-rw-r--. 1 dion dion 807 Mar 16 06:47 README.md

En nu kunnen we kijken met ‘git status’ of dit wel een echte repo is:

dion@localhost backup]$ git status# On branch masternothing to commit, working directory clean

We zien zelfs dat de hele history meegekomen is:

dion@localhost backup]$ git logcommit 6f5dcdaaf57393e1012f8548bde9dc2c8c678a04Merge: abfee4b 2a4a2eaAuthor: Jonathan Price <[email protected]>Date: Fri Jan 16 18:59:52 2015 +0000

Merge pull request #9 from xCP23x/master

Various minor improvements

...

t 7931dd5fb8171e02cf5b2bd92876ceb76eef9752Author: Jonathan Price <[email protected]>Date: Tue Aug 12 16:57:10 2014 +0100

Initial commit(END)

40 Chapter 9. git clone

Page 45: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 10

git branch (& git checkout)

Je kan in een een repository een nieuwe ‘branch’ (vertakking) aanmaken.

Cambridge Dictionary: branch

Er is altijd een ‘branch’ aanwezig en deze heet ‘master’. We gaan kijken met ‘git status’ wat het huidige verhaal is.

[dion@localhost repo_een]$ git status# HEAD detached from 349bf47

HEAD betekend de huidige branch. Echter als je ‘HEAD detached’ ziet staan betekend dat deze wijst naar een andererevisie van de huidige branch.

Dit komt omdat we met een eerdere ‘git checkout’ in onze historie terug zijn gegaan (een andere revisie hebbengekozen).

[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

echo "Dit is de directory:"

ls -la

[dion@localhost repo_een]$ git logcommit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt

We kunnen ook het ‘git checkout master’ naar de meest recente versie van de standaard branch gaan (en deze heet‘master’).

[dion@localhost repo_een]$ git checkout master

Previous HEAD position was e0d1981... Nieuw bash script gemaakt

41

Page 46: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Switched to branch 'master'

[dion@localhost repo_een]$ git logcommit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

echo "Dit is de directory:"

ls -lahi

Als we nu nog een keer een ‘git status’ doorvoeren, zien we netjes in welke branch we zitten (in ‘master’). De meldingvan ‘HEAD detached’ zien we ook niet meer, (omdat we in de meest recente revisie zitten).

[dion@localhost repo_een]$ git status# On branch masternothing to commit, working directory clean

In plaats van te gaan spelen met de revisies, maken we een nieuwe branch aan met ‘git branch’:

[dion@localhost repo_een]$ git branch vraag_zip

Je ziet dat we niet automatisch naar de nieuw aangemaakte branch gaan:

‘git checkout vraag_zip‘ betekent: Verlaat de huidige branch en ga naar branch ‘vraag_zip’.

[dion@localhost repo_een]$ git checkout vraag_zipSwitched to branch 'vraag_zip'[dion@localhost repo_een]$ git status# On branch vraag_zipnothing to commit, working directory clean

We gaan nu het bash script aanpassen, maar omdat we dit doen in de branch ‘vraag_zip’, blijft de branch ‘master’onaangetast.

Voeg in het script onderdaad de volgende code toe:

while true; doread -p "Deze folder gzippen? [j/n]" jncase $jn in

[j]* ) tar -cvzf dir_archief . ; exit;;[n]* ) exit ;;

* ) echo "Graag 'j' of 'n' gebruiken...";;esac

done

Als het aanpassen in ‘vi’ niet gelukt is can je ook onderstaande code plakken in de repository:

42 Chapter 10. git branch (& git checkout)

Page 47: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

cat > show_dir.sh << EOM#!/bin/bash

echo "Dit is de directory:"

ls -lahi

while true; doread -p "Deze folder gzippen? [j/n]" jncase $jn in[j]* ) tar -cvzf dir_archief . ; exit;;[n]* ) exit ;;

* ) echo "Graag 'j' of 'n' gebruiken...";;esac

doneEOM

Met ‘git status’ zien we dat de file ‘show_dir.sh’ is aangepast:

[dion@localhost repo_een]$ git status

# On branch vraag_zip# Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: show_dir.sh#no changes added to commit (use "git add" and/or "git commit -a")

We gaan nu met ‘git add’ en ‘git commit’ de wijzingen doorvoeren naar de Staging Area en de Git Repository.

[dion@localhost repo_een]$ git add .[dion@localhost repo_een]$ git commit -m "Script uitgebreid met gzip mogelijkheid"[vraag_zip 489f96a] Script uitgebreid met gzip mogelijkheid1 file changed, 9 insertions(+)

We zien in dat we netjes in de ‘branch’ ‘vraag_zip’ zitten, en dat de wijzingen opgenomen zijn in de ‘git log’. Echtergeldt dit alleen voor de ‘branch’ ‘vraag_zip’:

Met ‘git branch’ kan je ook zien welke branches er zijn en in welke nu geselecteerd is (zie de asterisk ‘*’).

dion@localhost repo_een]$ git branchmaster

* vraag_zip

43

Page 48: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

44 Chapter 10. git branch (& git checkout)

Page 49: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 11

git merge & (git log)

Hieronder staat de huidige situatie:

[dion@localhost repo_een]$ git branchmaster

* vraag_zip

[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

echo "Dit is de directory:"

ls -lahi

while true; doread -p "Deze folder gzippen? [j/n]" jncase $jn in[j]* ) tar -cvzf dir_archief . ; exit;;[n]* ) exit ;;

* ) echo "Graag 'j' of 'n' gebruiken...";;esac

done

[dion@localhost repo_een]$ git checkout masterSwitched to branch 'master'

[dion@localhost repo_een]$ git branch

* mastervraag_zip

[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

45

Page 50: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

echo "Dit is de directory:"

ls -lahi

We gaan nu terug naar de branch ‘vraag_zip’. Als we vanuit hier een ‘git merge master’ doen dan bedoelen we daarmeedat we alle wijzigingen van de branch ‘master’ willen samenvoegen met de branch waarin we nu zitten. Aangezien ergeen wijzigingen in ‘master’ zijn geweest valt er niks te mergen.

[dion@localhost repo_een]$ git checkout vraag_zipSwitched to branch 'vraag_zip'[dion@localhost repo_een]$ git merge masterAlready up-to-date.

Als we nu terug gaan naar ‘master’ en vanuit daar een ‘git merge vraag_zip’, dan neemt ‘master’ alle wijzigingen vande branch ‘vraag_zip’ mee.

Switched to branch 'master'[dion@localhost repo_een]$ git merge vraag_zipUpdating 349bf47..4ce38c9Fast-forwardshow_dir.sh | 9 +++++++++1 file changed, 9 insertions(+)

[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

echo "Dit is de directory:"

ls -lahi

while true; doread -p "Deze folder gzippen? [j/n]" jncase $jn in[j]* ) tar -cvzf dir_archief . ; exit;;[n]* ) exit ;;

* ) echo "Graag 'j' of 'n' gebruiken...";;esac

done

[dion@localhost repo_een]$ git checkout masterSwitched to branch 'master'[dion@localhost repo_een]$ git merge vraag_zipUpdating 349bf47..4ce38c9Fast-forwardshow_dir.sh | 9 +++++++++1 file changed, 9 insertions(+)

[dion@localhost repo_een]$ cat show_dir.sh#!/bin/bash

echo "Dit is de directory:"

ls -lahi

while true; doread -p "Deze folder gzippen? [j/n]" jncase $jn in[j]* ) tar -cvzf dir_archief . ; exit;;[n]* ) exit ;;

* ) echo "Graag 'j' of 'n' gebruiken...";;

46 Chapter 11. git merge & (git log)

Page 51: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

esacdone

Zoals je weet kan je met ‘git log’ de historie zien. Er zijn wat opties voor ‘git log’ die handig kunnen zijn, waarbij:

–oneline | zet de commit op een lijn–decorate | laat ook de head en de branch zien–graph | maak vertakkingen door branches en merges visueel

[dion@localhost repo_een]$ git logcommit 4ce38c95761aa587f00c359fa7fccc6cda64bea0Author: Dion H.J. Dresschers <[email protected]>Date: Tue Mar 17 08:49:54 2015 -0400

Script uitgebreid met gzip mogelijkheid

commit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt[dion@localhost repo_een]$ git logcommit 4ce38c95761aa587f00c359fa7fccc6cda64bea0Author: Dion H.J. Dresschers <[email protected]>Date: Tue Mar 17 08:49:54 2015 -0400

Script uitgebreid met gzip mogelijkheid

commit 349bf475ecce786e90e6432bc1fd32c142d8ca37Author: Dion Dresschers <[email protected]>Date: Fri Mar 13 08:46:07 2015 -0400

Ook human-readible en inodes toegevoegd

commit e0d1981c46c1e25eb99379f1387e12f3dab0fffaAuthor: Dion Dresschers <[email protected]>Date: Fri Mar 13 06:47:55 2015 -0400

Nieuw bash script gemaakt[dion@localhost repo_een]$ git log --oneline4ce38c9 Script uitgebreid met gzip mogelijkheid349bf47 Ook human-readible en inodes toegevoegde0d1981 Nieuw bash script gemaakt[dion@localhost repo_een]$ git log --oneline --decorate4ce38c9 (HEAD, vraag_zip, master) Script uitgebreid met gzip mogelijkheid349bf47 Ook human-readible en inodes toegevoegde0d1981 Nieuw bash script gemaakt[dion@localhost repo_een]$ git log --oneline --decorate --graph

* 4ce38c9 (HEAD, vraag_zip, master) Script uitgebreid met gzip mogelijkheid

* 349bf47 Ook human-readible en inodes toegevoegd

* e0d1981 Nieuw bash script gemaakt

47

Page 52: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

Met ‘man git log’ krijg je de manual van de git logging. Bij complexere repo’s waarmeerdere mensen in verschillendebranches werken kan dit een mooi en verhelderend beeld opleveren:

[dion@localhost repo_een]$ git log --oneline --graph --decorate=full

* 4ce38c9 (HEAD, refs/heads/vraag_zip, refs/heads/master) Script uitgebreid met gzip→˓mogelijkheid

* 349bf47 Ook human-readible en inodes toegevoegd

* e0d1981 Nieuw bash script gemaakt

Je kan zien dat bovenstaand voor een aardig lange commandoregel kan zorgen.

Je kan hier een git alias maken, in dit geval maken we gebruik van de alias ‘lola’:

[dion@localhost repo_een]$ git lolagit 'lola' is not a git command. See 'git --help'.

[dion@localhost repo_een]$ git config --global alias.lola '!git log --graph --→˓decorate --pretty=oneline --abbrev-commit --all'

Je kan ook om het overzichtelijker te maken ook kleuren toevoegen in de config.

[dion@localhost repo_een]$ git config --global color.ui "auto"

[dion@localhost repo_een]$ cat ~/.gitconfig[user]

name = Dion H.J. Dresschersemail = [email protected]

[alias]lola = !git log --graph --decorate --pretty=oneline --abbrev-commit --all

[color]

48 Chapter 11. git merge & (git log)

Page 53: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

ui = auto

49

Page 54: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

50 Chapter 11. git merge & (git log)

Page 55: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 12

Welkom bij de Git & GitHub Cursus!

Welkom bij de Git & GitHub cursus. Deze cursus is zo opgebouwd dat alle oefeningen uit te voeren zijn in eenvirtuele machine (VM). We gebruiken Centos 7 als besturingssysteem voor de VM en virtualiseren op VirtualBox.Alle gebruikte software is Open Source.

51

Page 56: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

Git Workshop Nederlands Documentation, Release 0.1

52 Chapter 12. Welkom bij de Git & GitHub Cursus!

Page 57: Git Workshop Nederlands Documentation · 12 Welkom bij de Git & GitHub Cursus!51 13 Git 53 i. ii. Git Workshop Nederlands Documentation, Release 0.1 Wil je deze cursus stap voor stap

CHAPTER 13

Git

Git is een versiebeheersysteem en is geschreven door Linus Torvalds, die ook bekend is van het Linux besturingssys-teem. Linus besloot in 2015 een eigen versiebeheersysteem te schrijven nadat BitKeeper niet meer beschikbaar wasvoor gratis gebruik en alternatieve alternatieven niet voldeden. Nu wordt Git dan ook gebruikt door hem en andereontwikkelaars om de Linux kernel te ontwikkelen.

Bij het ontwerpen van Git waren er een paar ontwerpeisen:

• Neem het versiebeheersysteem CVS als een voorbeeld hoe het NIET moet. Bij twijfel, kies het tegen-overgestelde van hetgeen dat CVS doet.

• Zeer sterke beveiliging tegen dataverlies. Zowel per ongeluk als moedwillig.

• Houd een BitKeeper-achtige werkstroom aan.

Iedere map die beheerd wordt door Git, bevat de gehele repository. Git is niet afhangelijk van een centrale server. Githeeft ook een focus op snelheid.

Git Cursus Nederlands van Dion Dresschers is in licentie gegeven volgens een Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationaal-licentie.

53