Git handleiding en tips

Nieuwe Git repository aanmaken

Login op de Gitea server of GitHub server

  • Druk bovenin op de ‘+’ en selecteer ‘New Repository’
  • Vul de ‘Repository Name’ in en evt een ‘Description’
  • En selecteer altijd ‘Initialize Repository’, zodat er alvast iets instaat (README) om te kunnen clonen
  • Kopieer de Git Repository URL, bijv: http://10.8.0.1:3000/arjan/Test.git

Lokaal

Ik gebruik SmartGit, hier staat in dit artikel informatie over installatie van SmartGit.

Start SmartGit en ga naar menu:

  • Repository->Clone (Ctrl-Shft-O)

  • Vul de Remote Git Repository URL in, bijv: http://10.8.0.1:3000/arjan/Test.git en klik op Next

  • Klik op Next

  • Vul Path in waar het project moet komen en klik Finish

Git in de terminal

Als er via de terminal gewerkt wordt en er geen SmartGit aanwezig is.

Workflow

Bron: http://rogerdudler.github.io/git-guide/

Je lokale repository bestaat uit 3 verschillende ‘trees’ beheerd door git. De eerste is je Working Directory dewelke je bestanden bevatten. De tweede is de Index dat zich als tussen stadium gedraagt (staging area) De laatste is de HEAD die verwijst naar de laatste ‘commit’ die je hebt gemaakt.

Status

Welke files moeten toegevoegd worden en welke zijn veranderd

# git status

Add & commit

Je kan aanpassingen aan je files toevoegen aan de **Index **

# git add <bestandsnaam>

of 

# git add *

Dit is de eerste stap in de basis werkwijze van git.  Om aanpassingen écht door te voeren gebruik je

# git commit -m "Commit message"

De aanpassingen zijn nu toegevoegd aan de HEAD, al zijn ze nog niet toegevoegd aan je repository als deze op een andere lokatie staat.

Pushing changes

Je aanpassingen zitten nu in de HEAD van je lokale werk-repository. Om deze aanpassingen door te sturen naar je repository op een andere lokatie, voer dan volgend commando uit 

# git push origin master

Verander master naar de branch-naam waar je je aanpassingen naar wil sturen.  Als je lokale werkbestanden niet gesynchroniseerd zijn met een bestaande repository (op een andere server bijvoorbeeld), voeg dan de bestaande repository toe aan je lokale repository

# git remote add origin <server>

Nu kan je je lokale aanpassingen, en dus ook je lokale repository, synchroniseren met de server die je net hebt toegevoegd.

Branching

Branches worden gebruikt om verschillende features te ontwikkelen in geïsoleerde omgevingen, los van elkaar.  De master branch is de basis of standaard branch wanneer je een nieuwe repository aanmaakt.  Maak nieuwe branches aan wanneer je nieuwe toevoegingen ontwikkelt en voeg ze samen (merge) met de master branch wanneer je klaar bent. Maak een nieuwe branch aan met de naam “feature_x” en ga er onmiddellijk naartoe

# git checkout -b feature_x

Ga terug naar de master branch

# git checkout master

Verwijder de branch

# git branch -d feature_x

Een branch is niet beschikbaar voor anderen tenzij je ze synchroniseert met de centale repository

# git push origin <branch>

Update & merge

Om je lokale repository te updaten naar de laatste versie, voer dan volgend commando uit in je lokale repository

# git pull

Op die manier kan je de aanpassingen fetchen en mergen met je lokale bestanden. Om een andere branch samen te voegen met je actieve branch, gebruik je

# git merge <branch>

In beide gevallen probeert git de aanpassingen automatisch te mergen. Jammer genoeg is dit niet altijd mogelijk en resulteert dit soms in een conflict. Je bent dan zelf verantwoordelijk om de conflicten manueel op te lossen en te mergen. Na de aanpassingen moet je de aangepaste bestanden opnieuw toevoegen aan je lokale repository

# git add <filename>

Alvorens je aanpassingen dan terug samen te voegen kan je ook de aangepaste code bekijken door middel van

# git diff <source_branch> <target_branch>

Tagging

Net zoals in SVN is het aangewezen om verschillende releases van je applicatie in een tag te steken. Je kan een nieuwe tag aanmaken met de naam 1.0.0 door volgend commando uit te voeren

# git tag 1.0.0 1b2e1d63ff

Het 1b2e1d63ff gedeelte van het commando staat voor de eerste 10 karakters van de commit id die je in een tag wil steken. De commit id kan je opvragen door volgend commando uit te voegen 

# git log

Het hoeven niet per se de eerste 10 karakters van de commit id te zijn, zolang ze maar uniek zijn.

Replace local changes

In het geval dat je wil terug gaan naar een vorige versie van een bestand (fouten maken kan gebeuren hé) gebruik je 

# git checkout -- <filename>

Dit zal het bestand in je huidige werkmap vervangen door de laatste versie die zich in de HEAD tree bevindt. De aanpassingen die je reeds hebt toegevoegd én de nieuw aangemaakte bestanden blijven behouden. Stel nu dat je alle lokale aanpassingen wil vervangen door de laatste versie van de repository die zich op de server bevindt  kan je volgende commando reeks gebruiken

# git fetch origin
# git reset --hard origin/master

Tips and tricks

Ingebouwde git GUI in Windows

> gitk

Handige kleuren output voor git

# git config color.ui true

Toon je log op 1 lijn per commit

# git config format.pretty oneline

Alleen gewijzigde files toevoegen aan GIT:

# git add -u

Gebruikte interactieve bestands toevoeging

# git add -i

# Git howto

Combinatie van gewijzigde files toevoegen en ook een commit:

# git commit -am  "<commit message>"

Hiermee gaan overigens niet nieuw toegevoegde files mee.

Verwijderen van een file, die eigenlijk niet in versiebeheer moet:

Met Remove in de Git client (aanvinken dat de lokale file moet blijven) of

# git rm CMakeCache.txt
# git rm --cache CMakeCache.txt

Negeren van files die niet in de repository hoeven

Bron: http://stackoverflow.com/questions/11542687/git-how-to-ignore-all-present-untracked-files

# git status -u no

Om de files officeel te negeren doe het volgende: Als je nog geen .gitignore file hebt

# touch .gitignore
# git status --porcelain | grep '^??' | cut -c4- >> .gitignore

Na het installeren van Git op een nieuwe machine

Het autocrlf is niet handig gebleken. Ik wil ook gewoon Linux files uit kunnen checken op Windows. https://help.github.com/articles/dealing-with-line-endings Start Git Bash en geef commando:

# git config --global core.autocrlf false

Kleuren binnen Git

use colorful git output: git config color.ui true show log on just one line per commit: git config format.pretty oneline use interactive adding: git add -i

Bare & non-bare repositories

Bij een bare repository, krijg je de file structuur niet te zien in de repository op de server. Vandaar de benaming bare. Het is het handigste om op de server een bare repository te hebben, en lokaal een non-bare (want je wilt wel de files zien). Zie: http://stackoverflow.com/questions/7861184/what-is-the-difference-between-git-init-and-git-init-bare

Sub projecten

Hoe om te gaan met delen van een project. Er zijn verschillende opties:

  1. Meerdere repositories naast elkaar voor elk deel van het project.
  2. Verschillende branches in de repository, voor elke deel van het project een branch. Als een deel in een branch klaar is, terug mergen naar de head.
  3. Niet aan te raden: Submodules binnen Git: http://git-scm.com/book/nl/Git-tools-Submodules. Hier zit wel gevaar aan.

Foutmeldingen

Probleem: bij een non-bare repository op de server, bij een push krijg je de volgende melding: error: refusing to update checked out branch: refs/heads/master error: By default, updating the current branch in a non-bare repository….etc

Windows Git clients

Windows Smart Git

Smart Git is een super programma voor Git repository´s onder Windows. Het handige is dat repository´s op 1 plek te overzien zijn en op verschillende plekken kunnen staan, dus niet alles onder één centrale Git directory (zoals bij GitHub Desktop van GitHub)

Licentie

Licenties zijn niet goedkoop, maar voor niet-commerciële gebruik is het gratis te gebruiken.

Download

Download de zip: https://www.syntevo.com/smartgit/download/ Pak deze uit en installeer deze.

Einde commerciële gebruiks periode?

Ik had bij instellen de Non-commercial use ingesteld, maar toch kwam er een melding dat ik een licentie moest kopen. Dat is te verhelpen door de settings directory leeg te maken op aanraden van Syntevo (https://www.syntevo.com/blog/?p=3669)

Settings directory hernoemen Bron: http://www.syntevo.com/doc/display/SG/Installation+and+Files#InstallationandFiles-DefaultLocationofSmartGit%27sSettingsDirectorysettings-dir.default-location

Open Windows Explorer:

  • Open pad: %APPDATA%\syntevo\SmartGit\
  • Hernoem de directory met de huidige versie, zoals nu bij mij: 18.2 naar 18.2.old
  • Start Smart Gi
  • En stel de Non-commercial use in bij opstarten en setup doorlopen

Windows Git Client

GitHub Windows client is gewoon bruikbaar met een lokale repository. Start de GUI en sleep een aangemaakte Git repository naar de GUI. http://haacked.com/archive/2012/05/30/using-github-for-windows-with-non-github-repositories.aspx/

Aanmaken van repository op de NAS

Login met SSH als root op de NAS

# cd /volume1/nas/Projecten/git/Test
# mkdir MainServer
# cd MainServer
# git init --bare
# cd ../..
# chmod -R o+w Test  -> ./init (staat in root dir en doet chmod & chown)
# chown -R Arjan:users Test