Git wurde 2005 von Linus Torwalds entwickelt, als er ein Werkzeug zur Quellcodeverwaltung des Linux Kernels benötigte. Seither ist die freie Software Git aus der Softwareentwicklung nicht mehr wegzudenken.
Neben der Versionsverwaltung bietet Git viele nützliche Features wie beispielsweise paralleles Arbeiten von mehreren Entwicklern.
Als Remote wird das zentrale Git-Repository bezeichnet. Hier liegen einerseits die Daten und andererseits werden die Rechte verwaltet. Die Berner Fachhochschule bietet hierfür gitlab.ti.bfh.ch und git.bfh.ch an. Weitere bekannte Git-Hoster sind unter anderem Github, Gitlab und Bitbucket.
Die zu verwaltenden Files werden in Git als sogenannte Snapshots gespeichert. Ändert ein File nicht, wird lediglich auf den Snapshot referenziert.
Ein File kann vier verschiedene Status haben.
File wird nicht von Git verwaltet. Files müssen explizit geaddet werden.
File wurde nicht verändert.
File wurde verändert.
Neue Version des Files ist bereit für einen Commit.
Ein Snapshot einer Softwareversion wird als Commit bezeichnet. Er kann als eine gespeicherte Version des Projekts betrachtet werden. Mehrere aufeinanderfolgende Commits bilden einen Branch.
Ein Branch ist eine Versionslinie, in welcher unabhängig der anderen Linien entwickelt werden kann. Auf dem Master-Branch werden die einzelnen, lauffähigen Softwarerelases verwaltet. Im Develop-Branch wird die Software aktiv entwickelt. Ist ein neuer Release im Develop fertig gestellt, wird dieser in den Master-Branch gezogen. Hier spricht man vom sogenannten Merging. Einzelne Bugfixes, Features etc. können weiteren Branches entwickelt und getestet werden, bevor diese in den Develop-Branch gemerged werden.
Das .gitignore
-File wird im Hauptverzeichnis des Repositories abgelegt.
Es beschreibt Files und Ordner, welche von Git ingoriert werden sollen.
Solche Files tauchen nicht mehr als untracked auf. Es lohnt sich, nicht
direkt projektrelevante Dateien wie Konfigurationsdateien oder Build-Outputs
in das Ignore-File zu schreiben. Folgende Wildcards und Syntax werden
unterstützt:
*.o
Alle Files mit der Endung .o werden ignoriert
build/
Alle Dateien innerhalb des Build-Ordners werden ignoriert.
Es gibt verschiedenste Git-Workflows. Dieses Tutorial beschreibt den Git-Workflow des I3S und mit Hilfe des Programms SmartGit. Als Projektbeispiel wird ein plain-C Projekt mit QT-Creator erstellt. Es kann aber auch ein anderes Programm und Projekt verwendet werden.
QT Creator Starten und neues Projekt erstellen
File->New File or Project
Non-Qt Project, Plain C Application
markieren und
Choose
klicken
Projektname: Git_Tutorial
, gewünschter Repository-Pfad angeben
und mit Next
bestätigen
Build system: qmake
, mit Next
bestätigen
Kit: Desktop Qt xy
auswählen und mit Next
bestätigen
Mit Finish
das Erstellen finalisieren.
Der Sorucecode sollte wie folgt aussehen :
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
Projekt Builden und Ausführen
Build->Build Project "Git_Tutorial"
Build->Run
Nun sollte auf einer Konsole die Ausgabe Hello World
erscheinen.
SmartGit starten
Repository hinzufügen
Repository->Add or Create
Als Repository-Pfad den Pfad des QT-Projektes angeben und mit
OK
bestätigen.
Mit Initialize
das Repository initialisieren
Nun listet QT alle gefundenen Files im Projektordner als untracked auf.
Relevante Files dem Repository hinzufügen
Bei QT-Projekten sind die *.c
, *.h
und das *.pro
File wichtig.
Mittels der ctrl
-Taste können diese Files markiert werden.
Mit Rechtsklick->Stage
können diese Files gestaged werden.
Nicht relevante Files können dem .gitignore
File hinzugefügt werden.
Als nicht relevante Files werden von QT generierte Files, sowie die
Einstellungen des Creators (*.pro.user
) betrachtet.
Rechtsklick->Ignore
auf das File Git_Tutorial.pro.user
Ignore as pattern : *.pro.user
Ignore File: .gitignore in repository root directory
Ignore
klicken
Durch Doppelklick auf das File, wird ein Editor geöffnet.
Folgende Zeile hinzufügen build-*/
. Somit ignoriert
Git alle Ordner und darunterliegenden Files, welche mit
build-
beginnen.
Das .gitignore
-File kann nun ebenfalls gestaged werden.
Mit der Schaltfläche Commit
können diese Files nun dem lokalen Repository
hinzugefügt werden.
Es empfiehlt sich, eine kurze und verständliche Commit Message zu
schreiben und mit dem Button Commit
zu comitten.
Nun haben alle Files den Status Unchanged
Mit persönlichem BFH-Account auf gitlab.ti.bfh.ch einloggen
Neues Projekt erstellen mit der Schaltfläche New Project
Project Name : Git_Tutorial
Wenn gewünscht, eine Kurzbeschreibung eintragen
Create Project
Nun wird das leere Repository angezeigt. Unter dem Titel Push an existing Git repository steht eine Anleitung, wie man das Repository mittels Konsole auf den Remote pushen kann.
Der Link auf der Zeile git remote add origin
kann mit ctrl+c
in die Zwischenablage kopiert werden.
Beispiel Link git@gitlab.ti.bfh.ch:sam2/git_tutorial.git
Remote in SmartGit hinzufügen
Remote->Add
URL or Path
den Link aus der Zwischenablage hineinkopieren und add
klicken
Anschliessend mit der Schaltfläche Push
das Repository auf den
Remote laden
Nun sollten die Projektdateien im Gitlab ersichtlich sein
Wurden die vorhergegangen Schritte alle erfolgreich abgeschlossen, ist das Repository nun eingerichtet und kann für produktives Arbeiten verwendet werden.
Modifikation des Codes
Als erstes wird nun im Sourcecode des Projektes im QT Creator gearbeitet. Hierfür kann beispielsweise eine neue Codezeile hinzugefügt werden. Der Sourcecode sieht nun folgendermassen aus.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
printf("This is a new line of code!\n");
return 0;
}
Im QT Creator das Projekt kompilieren und ausführen.
Build->Build Project "Git_Tutorial"
Build->Run
Nun sollte in der Konsole folgendes ausgegeben werden :
Hello World!
This is a new line of code!
In Smartgit ist die Modifikation nun ersichtlich.
Duch Klicken auf Commit
können die Änderungen in das lokale Repository
übernommen werden. Es ist Empfohlen, eine aussagekräftige Commit Message
anzugeben. Durch Klicken auf Commit
werden die Änderungen übernommen.
Der Status der Datei main.c
sollte nun auf Unchanged
gewechselt haben.
Mittels der Schaltfläche Push
kann das Repository nun auf den Gitserver
geladen werden.
Branch->Add Branch...
und Branchname einfügen (bsp. feature/introtext).
Anschliessend Add Branch & Checkout
auswählen.
Im QT Creator Code-Änderungen /-Ergänzungen durchführen
Die Änderungen in Smartgit dem Repository hinzufügen.
Checkout
Master Branch
Merge Branch feature/introtext (Create Merge Commit)
Commit
Push