Skip to content

Instantly share code, notes, and snippets.

@HendrikPetertje
Last active December 25, 2015 12:38
Show Gist options
  • Save HendrikPetertje/6977369 to your computer and use it in GitHub Desktop.
Save HendrikPetertje/6977369 to your computer and use it in GitHub Desktop.
This gist describes the use of Git in Dutch and gives some tips for good practice

De Git Guide

Door Peter van der Meulen
www.picoreclame.nl

#Inhoudsopgave

#Git?

Als je deze gids leest ben je vast geïnteresseerd in versiebeheer of Git als specifiek middel om versie beheer te genereren. Mijn interpretatie op versiebeheer is het vermogen om bij het maken van een project precies te kunnen zien wanneer ik iets heb gedaan en wat de anderen deden. Ook staat het me toe een interventie uit te voeren in de projecten die ik maak. Zo kan ik wijzigingen of toevoegingen die achteraf onnodig lijken te zijn makkelijk terugdraaien zonder de rest van mijn project te storen. een ultieme ctrl z tool dus! Bovendien is de versiebeheer die ik gebruik (Git) zo gemaakt dat het rekening houdt met het maken van verschillende deelproducten in een project en de agile methode SCRUM. Met zogenaamde branches kan ik namelijk makkelijk wijzigingen maken voor een opgedeelde user-story zonder anderen in de weg te lopen. Het laatste en mooie van versiebeheer door Git is het pushen en pullen. Ik kan makkelijk en veilig mijn project uploaden, documenteren en delen via online Repositories en op die wijze ook met meerdere personen werken aan een project. Bovendien kunnen testers en gebruikers ook nog eens gemakkelijk hun problemen kwijt in de Issues secties van mijn projecten. Is het niet heerlijk?

##Git is:

  • Versiebeheer.
  • Een makkelijke manier om applicaties, projecten en producten (door middel van Secure Shell ook wel SSH) uit te wisselen tussen clients, servers en online datacentra.
  • Een grappige manier om code-snippets uit te voeren als update voor je computerbestanden.

##Github is:

  • Een online platform voor de opslag van Applicaties, projecten en producten in versiebeheer.
  • Issue-tracking.
  • Medium voor documentatie (door middel van o.a. Markdown en WIKI).
  • Platform voor discussie op code, methodiek, etc.

Genoeg evangelisatie door mijn definitie van Git en versiebeheer... Aan het werk! In dit document ga ik je alles uitleggen over het installeren van Git, het koppelen van Github en het gebruik van Git. Veel leesplezier!

Peter van der Meulen www.picoreclame.nl

#Best practises vooraf!

  • Zorg ervoor dat al je projectdocumenten eindigen met een extra lege regel. Deze regel wordt in git gemeten als end-line en zorgt ervoor dat regelherkenning goed werkt in je documenten! Alle Ruby documenten hebben dit standaard al. Door jezelf aangemaakte bestanden nog niet natuurlijk!
  • Commit regelmatig. Het veilig stellen van je werk kan nooit kwaad. Tevens is het handig bij het terugdraaien van veranderingen. Je kunt dan kleinere stapjes terug draaien ;)
  • Praat in je commit berichten en communicatie via git altijd in de tegenwoordige tijd. Als je een document hebt aangepast schrijf je niet "added document and eddited something else" maar "adding document and edditing something else". Je projectgenoten krijgen namelijk de commits toegestuurd als updates. die moeten het dus nog doen. Plus dit is een internationale afspraak tussen ontwikkelaars om verwarring te voorkomen. Als je wel in de verleden tijd spreekt heb je het automatisch over iets uit een vorige commit en als je in de toekomstige tijd typt beloof je het later in een opvolgend commit te doen.
  • werk zoveel mogelijk in de taal waarin je programmeerd. Programmeer je in het engelstalige Ruby dan schrijf je de documentatie en commits daar ook in. Is je programmeertaal brits (bijvoorbeeld CASUAL language) tik dan in het brits. Ik hoef je vast niet uit te leggen dat dit alleen maar beter is voor de code.
  • Lees de rest van dit document goed door!
  • zie je > voor code regels staan in dit hulp-document? dan moet je het commando erna in je terminal uitvoeren.
  • Zie je in de commando's het teken staan en werk je op windows? vervang dan met het pad naar je gebruikers-account (meestal c:/users/username)
  • pst: onderin dit document staan tips en tricks.
  • pst 2: werk je met ubuntu? check dan mijn "perfect git console" gidsje. Werk je met Windows? check dan "posh-git" eens.
  • vind je deze gids helemaal te gek en wil je me bedanken? Ik ben dol op speciaal biertjes! een euro mag natuurlijk ook ;)

#Installatie en gebruik

##Git installeren

Ubuntu gebruikers mogen lekker lui zijn in dit stukje van de installatie. Open een terminal en tik onderstaande commando's:

> sudo apt-get update
> sudo apt-get install git

Installeer git op je windows of Mac computer van http://git-scm.com/downloads. Volg de standaard installatie instructies volgens de site

open na de installatie een terminal en geef het volgende commando:

> git --version

zie je een versie nummer of geeft de terminal je hulp bij het invullen van een goed git commando? Je git werkt.

we gaan nu een standaard editor instellen voor long commits. Typ onderstaand commando in je terminal.

> git config --global corde.editor "nano"

werk je op Mac? vervang dan nano met een terminal-code-editor naar keuze bijvoorbeeld "pico" of "vi". Vergeet niet de " " die moeten er wel in. Werk je op Windows? Voer dan onderstaand commando uit om van Notepad je standaard long-commit te maken:

> git config --global corde.editor "notepad" -multiInst -notabbar -nosession -noPlugin "$*"

In bovenstaand commando is -MultiInst het belangrijkst! Dit zorgt er namelijk voor dat je console even wacht tot je het document weer hebt afgesloten, voordat ie de commit doorvoert.

##RSA RSA is een systeem bedacht door Ron Rivest, Adi Shamir and Leonard Adleman (hun achternamen maken RSA). Het systeem werd bedacht om elke computer een serienummer te geven. Dit serie nummer wordt gebruikt als verificatiemiddel in veel beveiligde verbindingen (met unix systemen). Voordat we verder gaan, gaan we een RSA profiel maken.

###maak een rsa profiel op je computer. Eerst gaan we checken of je een ssh map hebt op je computer. Dit is een mapje waarin het "Secure Shell" systeem haar identiteit (rsa-nummer), de rsa-nummers van computers die zonder wachtwoord op je computer mogen komen (Authenticated Hosts) en door gebruiker bekende hosts (known hosts) opslaat. Open een terminal scherm en geef de volgende commando's:

> cd ~
> ls -ali

Zie je in de lijst (van al je bestanden inclusief verborgen bestanden) geen .ssh staan? tik dan:

> mkdir ~/.ssh

nu gaan we het mapje binnen geef het volgende commando:

> cd ~/.ssh

Nu gaan we een unieke code maken:

> ssh-keygen -t rsa 

volg de instructies. Zelf gebruik ik geen wachtwoord of naam, maar de keuze is natuurlijk aan jou. Ga je een rails app deployen, dan is het aan te raden geen wachtwoord te nemen. Dit om het proces te versnellen in Capistrano. Als alles is gelukt en je voor de grap het commando ls -ali geeft in de terminal zie je dat je 2 bestanden hebt gekregen: id_rsa (je privé all acces code om toegang te geven aan iedereen die het heeft, hou deze geheim!) en een id_rsa.pub (Pulieke code die je gebruikt om toegang te vragen bij servers hou ook deze zo veel mogelijk geheim om identiteitskopie te voorkomen).

we gaan de publieke code opvragen in de terminal. tik het volgende commando:

> cat id_rsa.pub

Als het goed is krijg je nu ssh-rsa met een dikke code erachter en mogelijk een e-mail adres (zonder .nl of .com) aan het einde. Kopieer dit naar een tekstdocument. En houd het even op je scherm. we hebben deze code straks nodig.

###Github Github is een online platform waar je versie beheer kunt uitwisselen. Je zou ook bitbucket kunnen gebruiken, maar we gebruiken voor het gemak even github. Wist je dat je nu ook op Github zit? leuk!

Ga naar www.github.com en maak daar een account als je die nog niet hebt.

Ga na het aanmaken naar je account settings pagina en druk op SSH Keys. Maak een nieuwe key, geef het de naam van je computer (maakt niet uit wat, als het maar makkelijk terug te vinden is) en plak de code uit het aan de kant gezette tekst document (van de vorige stap). Druk op de Add Key knop.

Nu moeten we onze terminal leren communiceren met Github. Je computer kent de host Github namelijk nog niet. We gaan daarom verbinding maken met Github via een SSH brugje. Typ onderstaand commando in je terminal:

> ssh -T git@github.com

je computer verteld je dat hij github niet kent. Dat is natuurlijk erg logisch. typ yes en druk op enter. Als het goed is trapt Github je verbinding eruit zodra die verbonden is. Dat hoort zo.

##Versie beheer starten Nu wil je vast je project map toevoegen als git-map zodat je versie beheer kunt starten. Ga in je terminal naar de map door gebruik te maken van cd commando's of maak een projectmap (Rails doet dit al voor je!) door het commando mkdir mapnaam te tikken. Vergeet niet dat je na het maken van de map of project wel eerst je mapje in moet gaan met de terminal. Dit doe je met het commando cd mapnaam. Geef in je projectmap het volgende commando:

> git init

Nu maakt je computer in de map een verborgen .git mapje aan (probeer niet in deze map te rommelen). Met onderstaand commando kun je kijken of je git init gelukt is:

> git status

We moeten echter nog wat bestanden toevoegen. Een git_ignore bestand waarin je alle bestanden aangeeft die je liever niet in je versiebeheer wilt opnemen (database, thumbs van je windows en trash bestanden van je Mac) en een README.MD waarin je basisdocumentatie van je project zet. Rails maakt al een git_ignore voor je, hier hoef je verder niet zoveel mee te doen. Rails en Ruby-applicaties maken echter bestanden aan die README.rdoc heetten. Zelf vind ik dat je al je documentatie in 1 taal moet doen. zelf ben ik een groot fan van de Markdown Documenten structuur (daar kijk je nu ook naar). Dus we gaan Markdown maken.

Als je een Rails project in versiebeheer hebt gezet Typ in je console (in je projectmap):

> rm README.rdoc

Dit gooit de readme van Rails weg. Tik vervolgens het volgende commando in je projectmap:

> touch README.md

Nu heb je een readme in markdown aangemaakt. Deze is echter nog leeg.

werk je niet met Rails? geeft dan het volgende commando om een git_ignore te maken.

> touch git_ignore

Deze is echter nog leeg. Plak zowiezo de volgende code in dit document (te openen met sublime of notepad):

.DS_Store

Dit zorgt ervoor dat Mac systeem mappen niet opgenomen worden in je project.

Sla je in bepaalde configuratie documenten wachtwoorden op en ben je van plan een publieke Github Repository te maken? Zorg ervoor dat je nu meteen die bestanden toevoegt in je git_ignore.

Een voorbeeld hiervan is bijvoorbeeld het deploy.rb bestand gemaakt door Capistrano de regel die je dan toevoegd aan de git_ignore is dan:

/config/deploy.rb

je mag tussentijds in je project git bestanden toevoegen aan je git_ignore. let wel op dat je je git_ignore eerst bijwerkt of tegelijk met het te verstoppen document commit. Later iets ignoren gooit niet je repository geschiedenis weg natuurlijk!

###Eerste commit We gaan de eerste bestanden opnemen in een "Intial Commit". Je kunt bestanden toevoegen in een Commit (tussenversie) door het commando git add * uit te voeren. Voor dit sterretje kun je de volgende waarden opgeven:

.PuntjeMet deze waarde voeg je alle bestanden en mappen toe in je commit.
..Dubbele PuntjesVoeg bestanden in bovenstaande map toe.
(beetje nutteloos, want daar is je project niet)
/mapnaam/bestandsnaamLocatie van bestandVoeg een specifiek bestand toe aan je commit zonder de rest mee te nemen.

We gaan in dit geval alle bestanden toevoegen aan onze commit-wachtrij. Dit doen we met onderstaand commando

> git add .

Nu gaan we onze klaargezette bestanden vastleggen in een commit (tussenversie). Tik onderstaand commando (de -a waarde doet alle toevoegingen inclusief verwijderde bestanden, vergeet je -a dan worden verwijderde bestanden niet meegenomen in de commit voor de veiligheid):

> git commit -a

Als het goed is opent nu je terminal-text-editor met een document. tik op regel 1:

Intial commit

Dit is een internationale standaard voor "first commits".

In nano tik je vervolgens ctrl + x, dan Y en vervolgens je ENTER-button. je commit is gedaan!

Werk je op windows of kun je niet werken met een terminal-text-editor? Doe dan een short-commit (maximaal 50 karakters)

> git commit -a -m "Intial commit"

Check je git status om te kijken hoe je project het nu doet:

> git status

Elke keer als je een bestand toevoegt, aanpast of verwijderd wordt deze in je git status omschreven. Met git log kun je de geschiedenis van je commits terug zien.

##Je project streamen naar github Nu wil je natuurlijk je project delen met de hele wereld. Een paar woorden van wijsheid vooraf:

  • Let op je git_ignore. Is deze goed gemaakt?
  • Let op stop nooit wachtwoorden in je bestanden (tenzij je een privéhub maakt) voeg bestanden met wachtwoorden toe in je git_ignore
  • Zit je in de branch master? (nog niet met branches gewerkt? don't worry je zit in master)
  • Heb je een README in je project?

Ga naar github.com en maak een new repository, voeg een naam toe, omschrijving van je project en stel je project in als privé of publiek project (pro-tip check deze sectie in tips en tricks voor gratis gebruik van 5 privé repositories), je wilt geen readme en git_ignore maken in je project. Maak 'm dan en laat het verschijnende scherm even staan.

In de opvolgende pagina krijg je instructies voor het toevoegen van een remote plak de regels uit het onderste blokje Push an existing repository from the command line in je terminal (terwijl je in de project map zit). Waarschijnlijk zien die commando's er ongeveer als volgt uit (want het zijn er 2):

git remote add origin git@github.com:Gebruikersnaam/applicatienaam.git
git push -u origin master

Elke keer dat je nu een commit doet voer je het commando git push origin master uit. de -u is alleen voor de eerste keer. je commit wordt dan online uitgevoerd.

##Andere projectleden toevoegen. Natuurlijk werk je niet alleen aan je project. Anderen mogen natuurlijk ook meedoen en committen.

##medewerkers toevoegen Ga naar je github projectpagina (www.github.com/gebruikersnaam/projectnaam) en druk op het settingsknopje aan de rechter kant. Ga in de setting naar het colaborators tablad, geef je wachtwoord even op (veiligheid voor alles) en voeg de gebruikersnamen van je projectleden toe.

##Project Downloaden Laat je projectleden naar je github projectpagina gaan en onderstaande zaken uitvoeren

Op de pagina staat aan de linker kant een SSH clone URL kopieeër deze naar je klembord Ga met je terminal naar je sites map of een verzamel map waar je al je projecten opslaat en tik het volgende commando

> git clone *

Vervang * met de link in je klembord (het lijkt op git@github.com:gebruikersnaam/projectnaam.git) Nu heb je een lokale kopie van het project. Ben je door de eigenaar van het project toegevoegd als medewerker (collaborator)? Dan kun je nu committen en pushen.

##Uploaden en downloaden ###Uploaden wil je je commits online zetten?

> git push origin master

vervang master met de branch die je wilt uploaden (meer daarover in de volgende sectie).

###Downloaden Wil je je offline project bijwerken met de wijzigingen van anderen? commit zelf eerst even je wijzigingen, stream dan alles omhoog en dan alles omlaag. hier een reeks met de commando's

> git add .
> git commit -a
> git push origin master
> git pull origin master

Pull is naar je computer toe trekken. Vervang master met je branch naar keuze (meer daarover in de volgende sectie).

##Branches Branches behoren tot de coolste functies van git. Met branches kun je in de schaduw van het project veranderingen maken zonder anderen in de weg te lopen. Je maakt eigenlijk je eigen kopie van het project, werkt daar code bij die je daarna in de hoofdstam (master) van het project stopt. In deze korte sectie gaan we een branch maken, aanpassingen uitvoeren, commiten, pushen om vervolgens weer terug te gaan naar het hoofdproject en de veranderingen te "mergen" (samenvoegen).

###Een branch maken Zorg ervoor dat je git status "clean" is (geen wijzigingen sinds je laatste commit).

Tik het volgende commando:

> git checkout -b test

We gaan ons nu uitchecken in de branch waar we zaten (master) en inchecken op een nieuwe branch (-b maakt nieuwe branch) die test heet.

met git status kun je zien in welke branch je zit. Gebruik je mijn Ubuntu script of Posh-git, dan zie je je branchnaam ook in de prefix van je terminalregels staan. Lekker makkelijk, omdat het kan.

Nu wijzigen we wat bestanden. Zet bijvoorbeeld een extra regel in je README.md voeg een nieuw bestand toe die test.txt heet in de hoofdmap. Gewoon omdat het kan. we gaan deze wijzigingen committen. met onderstaand commando

> git add .
> git commit

Een grappige regel in je commit message bijvoorbeeld `adding some info and making a testfile`.
`ctrl x` dan `y` dan `Enter`

Nu willen we natuurlijk dat onze nieuwe branch ook online te zien is:

> git push origin test

Log nu in op github, ga naar je project en druk links boven op branches. Je branch staat er nu tussen!

Nu willen we natuurlijk weer terug naar het hoofdproject. Tik het volgende commando:

> git checkout master

we hoeven geen -b te doen, want master bestaat natuurlijk al. Als je nu even naar je bestanden kijkt zie je dat al je wijzigingen verdwenen zijn! je readme is nog kort en je hebt geen text.txt meer.

Nu gaan we de wijzigingen die we hebben gedaan in de test-branch "mergen" (samenvoegen) met de master-branch.

> git merge test

test wordt nu gemerged in je huidige branch (master)

Soms wil het wel eens gebeuren dat zowel jij als iemand anders gewerkt hebben in hetzelfde bestand. Je merge geeft je dan de namen van de bestanden die ruzie hebben. Laat het terminal venster open staan en open de bestanden. Git heeft nu de ruzie-makende aan door deze regels toe te voegen in je code:

<<<<<<< HEAD:index.html
<Code uit je master branch>
=======
<Code uit je test branch>
>>>>>>> iss53:index.html

Los de problemen op door de bestanden aan te passen en natuurlijk de gekke regels er weer uit te slopen.

Als het goed is heeft git al een commit voor je klaargezet met de ruziemakende bestanden. Je hoeft na het oplossen van de problemen alleen maar onderstaand commando te geven:

> git commit -a -m "Merge fixes test to master"

Voer nu merge tests uit. Werkt alles zoals het hoort, slagen je rspec tests, en werkt de website helemaal?

> git push origin master

Je branch weggooien

Misschien wil je je branch weggooien als je er klaar mee bent (niet aan te raden in schoolprojecten)

Hiermee gooi je hem lokaal weg

> git branch -D branchnaam

Hiermee gooi je hem in Github weg

> git branch -d remotes/origin/branchnaam

Let op voegt iemand anders branches toe op Github? Dan krijg je die niet standaard op je computer. Je kunt ze toevoegen aan je lokale Git-database door het commando > git pull origin branchnaam te geven.

#Tips & Tricks

##Lange berichten vs korte berichten Wil je in je commit een kort bericht plaatsen van minder dan 50 karakters?

> git commit -a -m "kort bericht"

Wil je een verhaaltje maken waarin je alles nog even uitlegd?

> git commit -a

Je terminal editor opent nu. De eerste regel die je typt is automatisch de Titel van de commit (max 50 tekens), alles eronder (met uizondering van regels die beginnen met een #) vormen de verdere omschrijving van de commit.

Een commit verwijderen of terugdraaien

Je kunt commits (een serie kleine veranderingen) gemakkelijk terug draaien door een nieuwe commit te maken die alles uit een bepaalde commit weer omdraaid:

om bijvoorbeeld 2 commits terug te gaan doe je:

> git rebase -i HEAD^^

de twee ^ zijn de hoeveelheid commits die je terug wilt gaan.

Om een bepaalde commit terug te draaien zonder latere wijziginen te storen doe je:

> git revert -n baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

revert betekend dat je een nieuwe commit gaat klaarzetten (nieuw versie) die de wijzigingen omdraait. -n betekend dat je niet wilt dat git automatisch gaat commiten, hij zet de commit alleen voor je klaar, zodat je zelf in je commit message kunt aangeven wat je hebt gedaan en waarom. Het lange nummer achter de commit is het unieke serienummer van de commit die je terug draait. deze is te vinden door in de commit list van github te kijken of in je terminal git log te tikken.

Na een revert moet je je wijziginen committen natuurlijk:

> git commit -a -m "revert changes from commit ... because ..."
> git push origin master

##Spelfouten in je commit of bestandje vergeten Heeft je laatste commit een bestand vergeten, een spelfoutje gemaakt of klopt de beschrijving niet helemaal?

> git add vergetenbestandsnaam
> git commit --amend

##Teveel in je commit gestopt (voordat je hem hebt gecommit)? Een bestand in je commit gestopt die niet nodig is?

> Git reset HEAD bestandsnaam

##Bestanden terugdraaien naar je laatste commit? Het wil wel eens gebeuren dat je iets veranderd maar toch weer terug wilt naar hoe het in je laatste commit was.

###1 bestand:

> git checkout -- bestandsnaam.

alle bestanden terugdraaien naar laatste commit:

> git reset --hard
> git clean -fd

Een bestand renamen:

Wil je dat git herkent dat je een bestand heb hernoemt? voer dan onderstaand commando uit:

> git mv oude_naam nieuwe_naam

Doe je dit niet, dan zal git zeggen dat je een bestand hebt weggegooid en daarna een nieuwe hebt toegevoegd. Dat is natuurlijk zonde voor al de commits die geregistreerd staan op dat bestand en kan negatief werken op het terug draaien van een commit.

##gratis privé repos op Github (omdat je student bent)

  1. Voeg in je account instellingen je school email adres toe en verify die.
  2. Ga naar www.github.com/edu geef aan wat je bent en geef je email adres op. Binnen enkele Amerikaanse werkuren ontvang je bevestiging op je school-email adres.

#Vragen? Contact mij op www.picoreclame.nl

@JaapGramsma
Copy link

Awesome, dankje. Altijd handig als je Git weer voor een tijdje niet hebt gebruikt.

@hzpc-joostk
Copy link

Hartelijk dank, Peter! Awesomely awesome!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment