Git Schulung
Einleitung / Geschichte
Git ist ein Distributed Version Control System, welches von Linus Torvalds (Erfinder und Maintainer des Linux Kernels) in 2005 entwickelt wurde.
Local VCS
Existiert nur auf einem Computer
Centralized VCS
Versionsdatenbank wird auf einem zentralem Server gespeichert. Ist dieser nicht erreichbar, kann niemand auf die verschiedenen Versionen zugreifen.
Distributed VCS
Versionsdatenbank wird komplett synchronisiert. Internetverbindung wird nur zum übertragen von Änderungen benötigt.
Installation Guide
Installation
-
Win + R
drücken. - Den folgenden Befehl kopieren, einfügen und bestätigen.
winget install --id Git.Git -e --source winget
- Anweisungen auf dem Bildschirm folgen und bestätigen.
OrderOder von der Offiziellen Seite herunterladen und installieren.
Die Git Konsole kann nun mit Rechtsklick in einem Ordner und Open Git Bash here
geöffnet werden. Alle nachfolgenden Befehle beziehen sich auf die Git Bash Konsole
.
Git konfigurieren
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git config --global init.defaultBranch main
git config --global core.editor nano
Wobei der Editor auch auf einen Beliebigen anderen gesetzt werden kann.
Usage Guide
Initialisierung eines Repositories
Anlegen eines neuen Repositories:
git init
git add .
git commit -m "Initial Commit"
Ein neues remote Repository hinzufügen:
git remote add origin https://git.agrarforschung.at/playground/my-first-project.git
git push -u origin main
Oder ein bereits existierendes Repository klonen:
git clone https://git.agrarforschung.at/playground/my-first-project.git
cd my-first-project
Git States
- Das Working Directory stellt die Dateien dar, wie sie sich aktuell auf der Festplatte befinden.
- Die Staging Area dient zum vormerken für Änderungen.
- Das Repository beinhaltet alle vorgegangenen Änderungen.
File States
State | Beschreibung |
---|---|
Untracked | Datei wird derzeit nicht vom VCS getrackt |
Unmodified | Datei wird vom VCS getrackt, aber wurde nicht verändert |
Modified | Datei wird vom VCS getrackt, allerdings gibt es Änderungen |
Staged | Datei ist zum committen vorgemerkt |
Informationen zum Repository erhalten
Zustand der Dateien abfragen:
git status
Verlauf ansehen:
git log
Änderungen ansehen:
git diff
Änderungen einchecken
Änderungen stagen:
git add <path-to-file> #für eine bestimmte Datei/Verzeichnis
git add -A #für alle Dateien
Änderungen commiten:
git commit -m "<kurze Beschreibung der Änderungen>"
Git Branching
Branches anzeigen:
git branch
Neue Branch anlegen:
git checkout -b <new-branch-name>
Branch am Remote anlegen:
git push --set-upstream origin <new-branch-name>
Branch wechseln:
git switch <branch-name>
<branch-to-merge-from>
in aktuelle Branch mergen:
git merge <branch-to-merge-from>
Merge Konflikt
Wird dieselbe Datei gleichzeitig bearbeitet entsteht ein sogenannter Merge Konflikt und Git kann diese Änderungen nicht mehr selbständig mergen.
Beispiel:
file1.txt
mit folgendem Inhalt.
Hallo!
Wird nun in der main
Branch wie folgt verändert:
Hallo, Welt!
Und in der update-greeting
Branch:
Hallo, Alle!
Wird nun, nachdem alle Änderungen entsprechend committed sind, ein merge Versuch in die main
Branch unternommen (git merge update-greeting
) entsteht dabei ein Merge Konflikt. Und der Inhalt der Datei file1.txt
ändert sich:
<<<<<<< HEAD
Hallo, Welt!
=======
Hallo, Alle!
>>>>>>> update-greeting
Wobei sich oben der Inhalt aus der aktullen Branch (main
) und unten der Inhalt aus der Branch aus Welcher gemerged wurde (update-greeting
) befindet.
Nun muss der Konflikt manuell behoben werden und die Marker entfernt werden.
Hallo, gesamte Welt!
Nun können die Änderungen mit dem Befehl git add
gestaged und der Mergevorgang git commit
abgeschlossen werden.
.gitignore
Ist eine Datei welche Regeln enthält, nach welchen Git Dateien ignoriert. Bei diesen Regeln handelt es sich um regular expressions
Zeichen | Beschreibung | Beispiel | Erklärung |
---|---|---|---|
? |
ein beliebiges Zeichen | ?bar |
Ignoriert abar , bbar aber nicht foo oder foobar |
* |
null oder mehrere Zeichen | *.foo |
Ignoriert alle Dateien, welche mit .foo enden |
/ |
Steht für Verzeichnisse | /foo |
Ignoriert die Datei foo nur im Projektstammverzeichnis |
bar/ |
Ignoriert alle Verzeichnisse mit dem Namen bar |
||
** |
Wie * nur auch über Verzeichnisgrenzen hinweg |
foo/**/bar |
Ignoriert foo/baz/bar sowie foo/baz/abc/bar |
[] |
Gruppe von Zeichen | [abc]foo |
Ignoriert afoo , bfoo und cfoo aber nicht wfoo |
[0-9] |
Steht für die alle zahlen von 0 bis 9 | ||
! |
Ignoriert diese Dateien nicht | *.a !lib.a |
Ignoriert alle Dateien welche mit .a enden, außer lib.a |
Sammlung von .gitignore templates für verschiedene Programmiersprachen.
Gitlab
Neues Projekt anlegen
- "New project" auswählen
- "Create blank project" auswählen
- Name und Gruppe festlegen
- Visibility festlegen
- Sollte bereits ein lokales Repository existieren, den Hacken bei "Initialize repository with a README" entfernen.
- Anleitung auf der Website folgen
Weitere Ressourcen
- Offizielle Dokumentation
-
git help
-
curl cht.sh/git