dirk postma

mijn aantekeningen . . .

024 - Git

Feb 1, 2015 - Comments - Linux

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.

Linux


Tags: Linux Raspberry Git

comments powered by Disqus