Direkt zum Hauptinhalt

Git Schulung

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.

      Order 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