Git

Git Bash

Für eine einfache Übersicht mit allen Git-Commands kann man auch das Cheat-Sheet von Gitlab zu Rate ziehen. Abgesehen davon gibt es im Internet zahlreiche Ressourcen die viel mehr in Detail gehen als diese Seite oder das Cheat-Sheet.

Setup

  • git init initialisiert den jetzigen Ordner als git Projekt
  • git clone <project-link> downloaden des Projektes

Das Format für diese Projekt-Links ist unterteilt in:

  • HTTPS: https://gitlab.com/gdw-trier/<group>/<project>.git
  • SSH: git@gitlab.com:gdw-trier/<group>/<project>.git

Die Authentifizierung bei HTTPS läuft über den Gitlab/Github Zugangsdaten, für SSH müssen sowohl auf dem Rechner als auch im Account ein Key hinterlegt werden. Um diesen Link zu generieren kann man ssh-keygen nutzen. Diesen findet man danach als Private-Key im C:\Users\<user>\.ssh\id_rsa und als Public-Key im C:\Users\<user>\.ssh\id_rsa.pub. Um den Public-Key nun in Gitlab zu hinterlegen (Edit profile -> SSH Keys).

.gitignore und .gitattributes

2 der wichtigsten Dateien für den Arbeitsfluss mit Git sind die .gitignore und die .gitattributes Dateien. Diese sollten auch im ersten Commit mitangelegt werden, bevor das Unity/Unreal Projekt selbst initialisiert wird. Die .gitignore sorgt dafür das nicht alle Dateien mit dem Server synchronisiert werden, sondern nur die Dateien die auch wichtig für andere sind.

Darunter zählen zum Beispiel:

  • config Dateien für deine IDE der Wahl
  • build Dateien, die beim Starten des Programms jedes mal neu erzeugt werden
  • Werkzeuge und Abhängigkeiten, die nicht im Projekt gelagert werden sollen
  • secrets wie API-Keys, die nicht für die Öffentlichkeit bestimmt sind

Für diesen Fall gibt es 2 Orte wo man nach einer vorgefertigten .gitignore suchen kann:

Die .gitattributes Datei, gibt an wie mit bestimmten Daten gehandhabt werden soll, in Bezug auf mergen, Datei-Formate oder Zeilen-Endungen.
Eine Kollektion an nutzvollen Daten findet man z.B. auf https://github.com/alexkaratarakis/gitattributes. Auch hierbei muss die gedownloadete Datei (z.B. Unity.gitattributes) in .gitattributes umbenannt werden.

Git LFS

git lfs install um Git Large File Storage zu nutzen, damit Große Dateien wie Texturen oder Models besser von Git gehandhabt werden.

Workflow

Wir empfehlen die Nutzung von Git-Fork über die Git-Bash aber die grundlegenden Features werden auch hier erklärt.

  • git status um Informationen über den jetzigen Stand zu erfahren (z.B. jetziger Branch, staged und unstaged Dateien oder dein jetziger Stand im Vergleich zu dem Branch auf dem du arbeitest)
  • git add <files> fügt unstaged Dateien den staged Dateien hinzu, um sie danach mit einem commit zu bundlen
    • git add -A oder git add . fügen alle Dateien hinzu
  • git commit -m "message" fügt alle staged Dateien zum nächsten commit hinzu und hängt den commit am Ende deines momentanen lokalen Branches an.
  • git fetch holt sich die neusten Informationen über die Branches auf dem Server ohne irgendwelche Inhalte zu downloaden
  • git pull holt den neusten Stand vom Server in deinen lokalen Branch
    • merged auch automatisch alle Veränderungen die lokal als auch remote gemacht wurden
    • wenn das automatisch nicht funktioniert entsteht ein merge Konflikt
  • git push versucht deine Änderungen auf den Server zu updaten, dies funktioniert nur falls dein lokaler Branch weiter ist als der remote Branch.

Git-Fork Client

Die Standard Befehle die man in der GitBash nutzt sind auch gleichgenannt mit in Fork zu erreichen, man kann auch oben rechts jederzeit die Konsole öffnen oder sich in der Oben in der Mitte anzeigen lassen, welche Befehle nun welcher Knopfdruck verwendet hat.

  • Initialisieren eines Projekts geht entweder über File -> Init new Repository... oder über File -> Clone...
  • git <fetch|pull|push> findet man oben links in der Main Leiste
  • Direkt darunter findet man 2 Ansichten (Local Changes und All Commits)
    • Local Changes zeigt in einer Übersicht alle unstaged/staged Dateien und die Änderungen die man in denen getroffen hat. Außerdem hat man unten rechts die Möglichkeit die gestageden Dateien mit einem “Commit subject” (Commit-Message) zu commiten.
    • All Commits zeigt die eine übersicht über alle Branches und Commits (+ deren Commit-Message, Author, Zeitpunkt etc.)