Git
Inleiding
Git is een distributie- en versiebeheer systeem, dat veel gebruikt wordt bij de ontwikkeling van software. Er zijn meerdere van dit soort pakketten, Git is echter wel erg goed en daarom ook zeer populair. Het draait op vele platformen, waaronder Windows, Linux, Mac. Het is oorspronkelijk ontwikkeld door de uitvinder van Linux, Linus Torvalds.
Installeren
Als Git nog niet geïnstalleerd, moet dat uiteraard eerst. Doe dat als volgt.
sudo apt-get install git
Configureren
Git moet de eerste keer geconfigureerd worden. Onderstaand enkele waarden.
git config –global user.name “gebruikersnaam”
git config –global user.email “user.domain.com”
Maak een nieuw project aan
Ga in hoofddirectory staan van een project, en maak op volgende manier een nieuwe repository aan.
git init
Klonen
Om samen te werken of om een project te kopiëren. Voorbeeld.
git clone git://github.com/schacon/simplegit.git
Binnenhalen en opslaan in een andere directory.
git clone git://github.com/schacon/simplegit.git mygit
Externe repository toevoegen
Onder een externe repository versta ik een repository op een andere computer. Doel maken van een backup. Op Github kunnen gratis projecten / repositories worden aangemaakt. Deze dienen dan wel openbaar te zijn. Voor gesloten repositories moet betaald worden.
Toevoegen van een repository op Github gaat bijvoorbeeld als volgt:
git remote add origin git@github.com:dirk2011/linuxnotes.git
Het synchroniseren gaat bijvoorbeeld als volgt:
git push -u origin master
Overzichtje maken van welke remote repositories gebruikt worden:
git remote -v
Gewijzigde en nieuwe bestanden toevoegen
Doe dat met git add
, het volgende voorbeeld de voegt huidige en subdirectory’s toe.
git add .
Of om bestanden uit de huidige directory toe te voegen
git add *
Status overzicht
git status
Of een beknopt overzicht met
git status -s
Git add
heeft een aantal handige opties. Een dry run.
git add -n
Verbose
git add -v
Update tracked files.
git add -u
Verschillen
Verschillen, unstaged changes
Welke veranderingen zijn er aangebracht in de werkdirectory’s t.o.v. de staging, of gewijzigd in de werkdirectory’s t.o.v. de laatste commit indien de staging leeg is, doe:
git diff
Verschillen, staged changes to commit
Welke veranderingen zitten in de staging en staan klaar om gecommit te worden, doe:
git diff –cached
Verschillen, tussen werkdirectory en laatste commit
Doe
git diff HEAD
eventueel gevolgd door een bestandsnaam.
Door –stat toe te voegen worden alleen maar totalen getoond, bijvoorbeeld:
git diff HEAD -–stat README
wordt informatie weergegeven over de wijzigingen in het README bestand, niet de wijzigingen zelf.
Verschillen beter weergeven
Installeer de tool meld om verschillen veel beter visueel weer te geven.
sudo apt-get install meld
Daarna moet de configuratie van git nog aangepast worden, doe:
git config --global diff.external meld
Opslaan, commit
De meest simpele opdracht:
git commit
daarna verschijnt wordt een editor opgestart, waarin een omschrijving kan worden ingevoerd.
Meteen een omschrijving meegeven met de commit kan ook:
git commit -m “beschrijf wat er is gewijzigd”
Of deze variant, die voegt alle gewijzigde bestanden toe, daarmee wordt staging overgeslagen:
git commit -am “beschrijf wat er is gewijzigd”
** Hou de 1e regel van beschrijving kort en krachtig. Sla vervolgens eventueel een regel over en voeg een langere omschrijving met meer details toe. **
12. “tijdreizen” tussen commits
Het is mogelijk terug te gaan naar een vorige commit, zonder daarvoor branches te gebruiken.
Eén bestand terughalen
Om één bestand terug te zetten doe als volgt. Achterhaal de korte commit key
,
bijvoorbeeld met git log --format=%t, %cD, %s
, of gebruik de alias gl
die ik
hiervoor heb aangemaakt.
Doe dan:
git checkout <korte commit key> <bestandsnaam>
Dit zet het bestand terug in de werkdirectory met als status staging. Opgepast dus het teruggezette bestand staat nu klaar om gecommit te worden.
Een bestand terughalen uit de master branch gaat als volgt.
git checkout master <bestandsnaam>
Terug keren na een commit punt
De lange commit key is nodig om terug te kunnen keren na een vorige commit.
De lange commit key kan als volgt bijvoorbeeld worden opgezocht
git log --format="%H, %cD, %s" -15
Doe dan:
git checkout <key>
Vervolgens wordt alle bestanden teruggezet, bestanden die nog niet bestonden worden gewist.
Git log, geeft nu “vreemde” informatie alle later changes lijken weg. Dat is niet
zo, doe: git branch -v
of gb
om de precieze status van het project te zien.
Terugkeren gaat als volgt:
git checkout master
Git heeft een betere oplossing om te switchen/werken met commits, genaamd branches, gebruik die!
Verschillen zichtbaar maken van een bepaald bestand
Om te ontdekken wat het verschil is in een bestand in de laatste en vorige commit doe dit:
git diff HEAD^ HEAD <bestand>
of doe
git diff HEAD^ HEAD
om de verschillen te tonen in alle gewijzigde bestanden. Indien bijvoorbeeld
meld
geconfigureerd is als tool wordt die aangeroepen om netjes de verschillen
weer te geven.
Ook met git diff
kunnen de korte commit keys worden gebruikt om verschillende
weer te geven.
git diff f962c18 ceef9a5 README.md
Bestand uit staging verwijderen
Indien een bestand te vroeg in de staging is gezet gaat verwijderen als volgt:
git reset HEAD <bestand>
nogal verwarrend commando. Aan git kunnen aliassen worden toegevoegd, die sommige zaken wat eenvoudiger maken om te onthouden voor de gebruiker, bv:
git config --global alias.unstage "reset HEAD"
Daarna gaat het terug zetten van een bestand in de staging eenvoudiger:
git unstage <bestand>
Reset heeft nog 2 varianten, deze nog eens beter bekijken. Bron: http://gitref.org/basic/
Bestand uit de respository verwijderen maar niet fysiek verwijderen
Om een bestand uit een repository te verwijderen handel als volgt:
git rm --cached my-music-lib2014.ods
Resultaat bestand wordt uit respository verwijderd, krijgt ook de status
deleted
maar blijft op schijf bestaan. Indien bestand al in de respository
zat, moet de wijziging nog wel gecommit worden. Pas .gitignore
aan om te
voorkomen dat bestand opnieuw in de repository wordt opgenomen!
Lokale kopie
Soms kan het handig zijn een lokale kopie te maken van een Git repository. Dat gaat erg eenvoudig. Een voorbeeld.
Eerst de bestaande repository kopiëren naar een nieuw, de doeldirectory mag nog niet bestaan.
git clone /media/rasp164-v/docsite docsite-db
git remote add dropbox /media/dropbox-v/git/docsite-db/
De directory heb ik eerst aangemaakt.
Het volgende commando laat zien welke remote kopieën er zijn.
git remote -v
Alleen maar de remote namen: git remote
.