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 NextKlik 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:
- Meerdere repositories naast elkaar voor elk deel van het project.
- 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.
- 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