Git
Git [ɡɪt] ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde.
Links
https://git-scm.com/ https://www.youtube.com/watch?v=elh1y6laO8I Schönes Beginner Tutorial https://git-scm.com/book/de/v2 //Ausführliches freies eBook https://de.wikipedia.org/wiki/Git GitHub - GitHub ist ein Onlinedienst, der Software-Entwicklungsprojekte auf seinen Servern bereitstellt (Filehosting). Namensgebend war das Versionsverwaltungssystem Git.
Was ist Git ?
Git ist ein verteiltes Versionsverwaltungssystem. Wenn man etwas alleine oder im Team programmiert, kann man alle Änderungen nachträglich verfolgen, Rückgängig machen, Varianten erstellen (Branches) Varianten zu einer neuen Version verschmelzen (merge) etc.
Git kann aber auch für andere Textdateien verwendet werden (z.B. Songtexte verwalten)
Git hat u.a. folgende Eigenschaften
- Nicht lineare Entwicklung
- Branching und Merging - Werkzeuge zum Erstellen von Codevarianten und verschmelzen von mehreren zu einem neuen.
- Kein zentraler Server
- Nutzer haben lokale Kopien des Repository inkl Versionsgeschichte (history)
- Datentransfer zwischen Repositories
- Git kann verschiedene Protokolle nutzen (file, http(s), ssh, ftp, git)
- file:// kann für den lokalen Transfer auf dem Rechner genutzt werden
- git:// wird oft für Lesezugriffe (für fetch und clone) genutzt
- ssh:// wird oft für Schreibzugriffe im Netz genutzt.
- Sicherheit der History
- Über einen Hashbaum wird sichergestellt, dass die Versionsgeschichte nachträglich nicht geändert werden kann.
- Versionierung über alle Dateien.
- Bei Gib bekommen bei der Änderung einer Datei alle Dateien im Projekt eine neue Versionsnummer.
Git Quickstart
Als Beispiel legen wir ein Verzeichnis legen wir einen Ordner mit dem Namen Songtexte an und erstellen zwei Dateien mit Songtexten. Z.B.
azzurro.txt we-are-the-champions.txt
Installation von git
Über https://git-scm.com laden und installieren
Projekt mit Git verwalten
Wichtig für Git ist die Kommandozeile. Es gibt auch GUIs aber man sollte die Commandline Befehle einigermaßen beherrschen.
- Terminal öffnen und in das Projektverzeichnis wechseln
git init .
Erzeugt im aktuellen Verzeichnis (aktuell = .) einen .git Ordner. Dieser ist das Repository in dem alle Änderungen gespeichert werden. Das aktuelle Verzeichnis ist dein Workspace. Dort kannst du ganz normal arbeiten.
Git Status
Mit
git status
Schauen wir welche Änderungen es im Verzeichnis gibt, die noch nicht von git erfasst bzw. versioniert sind. Das sind im Moment noch alle.
Dateien im Repository Tracken und Versionieren - ADD & COMMIT
Mit add kann man git dazu bringen Dateiverläufe zu verfolgen (tracken) und mit commit kann man Versionsstände dieser Dateien festhalten.
git add azzurro.txt we-are-the-champions.txt
oder auch mit Jokern
git add *.*
Wenn man jetzt den Status abruft zeigt git an, das die Dateien getrackt werden aber noch neu und nicht commited sind.
Änderungen verwalten
Hat man etwas im Projekt verändert sieht man mit einem erneuten git status welche Dateien sich verändert haben und mit git diff zeigt git einem die genauen Änderungen an.
git status git diff
Passt alles können wir die Datei wieder fürs committen adden und dann den Commit durchführen
git add azzurro.txt git commit
Datei auf den letzen Stand zurücksetzen
Sehen wir mit unserem git diff, dass wir Änderungen gemacht haben die wir nicht wollen, können wir die Datei auf den letzen Versionsstand zurücksetzen:
git checkout we-are-the-champions.txt
Git User Profildaten Konfigurieren
Nicht schön im Beispiel: Git hat als User einen automatisch aus dem Mac Nutzerprofil generierten Namen erzeugt. Man kann aber auch selbst einen globalen Usernamen mit dazugehöriger E-Mail erzeugen:
git config --global user.name "Stephan Schlegel" git config --global user.email dev@stephanschlegel.de
Editor konfigurieren
Der Editor der von Git aufgerufen wird ist nicht jedermanns sache. Möchte man Ihn ändern gibt es zwei Wege entweder über das User Config File direkt oder üer das Terminal. Hier der zweite Weg:
Terminal:
git config --global core.editor "nano"
Konfiguriert nano als Standard Editor
Wenn der Editor ein externes Fenster öffnet und nicht im Terminal ausgeführt wird, muss man git sagen es soll warten bis der Editor gespeichert und das File geschlossen hat. Sonst gibt es beim Commit eine Fehlermeldung, das keine Message vom Editor kam. Dazu nutzen wir die -w Option.
git config --global core.editor "atom -w"
Wichtige Befehle
Repository anlegen
git init .
Status
git status git status -s #shortversion
Dateien Tracken / Stagen
git add myfile.ext git
Dateien Unstagen
git checkout myfile.ext
Unterschiede anschauen
# diff der unstaged Änderungen (noch nicht für commit vorgemerkt) git diff # diff der staged Änderungen git diff --staged git diff --cached
Commit (Versionieren)
git commit # mit inline Message git commit -m "Kommentar zum Kommit" # Ohne Staging alle Änderungen kommitten (add überspringen) git commit -a -m "Kommentar" # Kommentar neu setzen (es dürfen keine Änderungen seit dem letzten Commit passiert sein) git commit --amend # Datei zum Commit nachreihen wenn vergessen $ git commit -m 'initial commit' $ git add meineVergesseneDatei.txt $ git commit --amend
Dateien aus dem Repository löschen
- Datei löschen reicht nicht. Datei muss aus dem Staging Bereich gelöscht werden und dann committed werden. Das geschieht mit git rm
git rm meineDatei.txt git status
- Datei behalten aber aus dem Tracking entfernen
git rm -cached meineDatei.txt
- Dateien mit Ending .xyz entfernen
#alle Logdateien aus dem Verzeichnis /log entfernen (beachte \) git rm log/\.log # Alle Dateien endend mit Tilde löschen git rm \*~
Dateien verschieben
Git verfolgt keine Verschiebungen, es gibt aber einen move Befehl. Im Prinzip macht git dann aber eine Kopie und löscht die alte Datei - mv ist also ein Shortcut.
mv README.md README
History
git log # Unterschiede (hier max 2)anzeigen git log -p -2 # Mit Statistik (gekürzt) git log --stat # Formatiert ausgeben (div Formate möglich) log --pretty=oneline # Eigenes Format git log --pretty=format:"%h - %an, %ar : %s" # Formatoptionen anzeigen: git log --pretty=format
Konfiguration
git config --global user.name "Stephan Schlegel" git config --global user.email dev@stephanschlegel.de git config --global core.editor "nano" git config --global core.editor "atom -w"
.gitignore
In einer .gitignore Datei kann man mit Suchmustern regeln, welche Dateien vom Repository ignoriert werden sollen.
Beispiele für Regeln:
# ignore Files ending wich the tilde (often used for temporary Files *~ # ignore all .a files *.a # ignore files ending with .o or .a (objects archives) *.[oa] # but do track lib.a, even though you're ignoring .a files above !lib.a # only ignore the TODO file in the current directory, not subdir/TODO /TODO # ignore all files in any directory named build build/ # ignore doc/notes.txt, but not doc/server/arch.txt doc/*.txt # ignore all .pdf files in the doc/ directory and any of its subdirectories doc/**/*.pdf
Online Dienstleister
Github Bitbucket Gitlab