Git Befehle, die man täglich benötigt

Hier habe ich eine kurze Anleitung zusammengestellt, die als erste Schritte mit dem verteilten Versionsverwaltungssystem Git verwendet werden können. Aller Einstieg ist schwer, deshalb habe ich mich hier auf das absolut wichtigste beschränkt.

Anwendungen

Ziel ist immer die Versionierung zu verwenden, wodurch auch der Verlauf der Änderungen sichtbar wird. Hier eine Liste von populären Einsatzbereichen:

  • Quellcode-Verwaltung (z.B. für Webprojekte)
  • Konfigurationsverwaltung
  • als Backup-Lösung
  • als Dateiablage

Abfolge der Befehle

In dem Schaubild wird aufgezeigt, in welcher Reihenfolge die Befehle angewendet werden:

Schaubild zur sequentiellen Anwendung der Befehle

GIT Einstellungen setzen

Repositoriy übergreifende Konfiguration setzt man mit folgenden Anweisungen:

# Name und Email setzen
git config --global user.name "Vorname Nachname"
git config --global user.email "ich@meinedomain.de"
# Farben bei der Ausgabe verwenden
git config --global color.branch auto
git config --global color.diff auto
git config --global color.interactive auto
git config --global color.status auto
# BBedit als Editor setzen (Mac OS X)
git config --global core.editor "bbedit -w"
# Textmate als Editor setzen (Mac OS X)
git config --global core.editor "mate -w"

Repository anlegen

Um ein neues Repository anzulegen, wechselt man in das Verzeichnis, welches als Basis des Repositories dienen soll:

mkdir meinprojekt
cd meinprojekt
git init

Natürlich kann auch ein schon vorhandenes Verzeichnis verwendet werden.

Checkout

git clone git_server:mein_repository

Ein Repository kann nur komplett verwendet werden (also nicht nur ein Teilbereich daraus; z.B. mit SVN war es möglich mit einem bestimmten Verzeichnis aus einem Repository zu arbeiten)

Falls das Projekt vorher schon mit SVN verwaltet wurde, wird das SVN Repository mit folgenden Befehl nach GIT migriert:

git-svn clone https://mein-svn-server.de/meinprojekt

Arbeiten mit Dateien und Verzeichnissen

Hat man eine Datei innerhalb eines Repositories geändert oder neu hinzugefügt (beides erfordert die gleiche Weiterführung) und will die Änderungen in das Repository aufnehmen, geht das wie folgt:

git add meine_datei.txt
git commit -m 'Kommentar, was ich geändert habe' meine_datei.txt
git push

Mit dem ersten Befehl zeigt man an, dass diese Datei beim nachfolgenden Commit berücksichtigt werden soll. die folgende Zeile für den eigentlichen Commit aus, was bedeutet, dass die Änderung der Datei im Repository aufgenommen wird. Der 3. Befehl ist nur dann erforderlich, wenn man die Änderungen des lokalen Repository an ein anderes Repository übertragen will. Dies ist dann der Fall, wenn man z.B. in einem Projekt als Team ein gemeinsames Repository nutzt.

Eine Datei entfernen

git rm meine_datei.txt
git commit -m 'meine_datei.txt habe ich entfernt, weil sie nicht mehr gebraucht wird.' meine_datei.txt
git push # nur erforderlich, wenn das lokale Repository auf ein externes Repository übertragen werden soll.

Eine Datei oder Verzeichnis umbenennen

git mv meine_datei.txt neuer_name.txt
git commit -m 'Datei wurde umbenannt'
git push # nur erforderlich, wenn das lokale Repository auf ein externes Repository übertragen werden soll.

Status überprüfen

Will man sehen, ob Dateien oder Verzeichnisse noch nicht commitet wurden, verwendet man folgenden Befehl im Verzeichnis das überprüft werden soll:

git status

Status unterscheidet zwischen staged und unstaged. Staged bedeutet, dass die Dateien schon für den Commit markiert wurden.

Commit Protokoll einsehen

Eine Liste der gemachten Commits:

git log

Updates holen

Will man aus einem externen (z.B. origin) Repository die Änderungen in das lokale Repository übernehmen, erledigt das folgender Befehl:

git pull

“pull” ist das gleiche wie “git fetch” und “git merge”. Für SVN/CVS Umsteiger ist das der Ersatz für “update”, welchen es bei Git nicht gibt. “pull” ist viel mächtiger, da man mit unterschiedlichen Quellen gleichzeitig arbeiten kann.

Arbeiten mit einem Branch

Ein Branch kann verwendet werden, um etwas auszuprobieren. Hier ein kleines Beispiel:

git branch testbranch # einen Branch names testbranch anlegen
git checkout testbranch # wechseln in den Branch names testbranch
touch > testerchen.txt # eine Datei im testbranch anlegen
git add testerchen.txt # Datei fuer commit kennzeichnen
git commit testerchen.txt # die Datei im testbranch commiten
git checkout master # umschalten zurueck in den master
git merge testbranch # Änderungen vom testbranch in den master Branch mergen

Tag setzen

Mit Git lässt sich ein Tag mit folgendem Befehl setzen:

git tag "Name des Tags"

Entfernen kann man einen Tag mit

git tag -d "Name des Tags"

Dateien ignorieren

Will man Dateien oder Verzeichnisse nicht über das Repository führen, legt man eine .gitignore Datei im Hauptverzeichnis des Repositories an (in dem Verzeichnis, in dem sich auch das Verzeichnis .git befindet).

*~
.DS_Store
.settings/
sites/default/dateien/

Dieses Beispiel schließt folgende Dateien aus:

  • alle Dateien, die mit ~ enden
  • alle Dateien mit dem Namen .DS_Store
  • alle Verzeichnisse .settings
  • alle Verzeichnisse sites/default/dateien

Jede Zeile stellt also ein Suchmuster dar, die beliebig spezifisch aufgebaut werden können. Ein * kann als Platzhalter für beliebige andere Zeichen eingesetzt werden (außer /).

GIT Installieren:

Git unter Linux Unter Linux ist das Installieren von GIT am einfachsten:

apt-get install git-core
apt-get install git-svn # nur wenn man aus SVN Daten importieren will

Eine empfehlenswerte GUI für Linux ist gitg:

gitg unter Ubuntu/Linux

Git unter Mac OS X Git wird als Macport angeboten. Hat man Macports installiert, so nimmt man die GIT Installation mit folgenden Befehl vor:

sudo port install git-core
# wenn SVN Unterstützung benötigt wird:
sudo port install git-core +svn

Wenn man Macports nicht installiert hat, kann man alternativ den git-osx-installer benutzen. Dabei handelt es sich um ein Setup-Programm (wie man es unter Mac OS X kennt), mit dessen Hilfe die Installation durchgeführt wird.

Wer unter Mac OS X ein GUI sucht, der kann GitX verwenden: So sieht GitX unter Mac OS X aus

Git unter Windows

Um GIT zu installieren, holt man sich die aktuelle Version von msysgit unter: http://msysgit.github.io/ und installiert diese. Wer gerne bevorzugt mit einer GUI arbeitet, dem sei TortoiseGit empfohlen (die Installation von mysgit ist auch für TortoiseGit erforderlich).

TortoiseGit für Windows TortoiseGit - Auswahl zu einem GIT Repository

GIT Integration in Eclipse

Eine GIT Integration wird über das Plugin EGit angeboten. Um es zu installieren, wählt man den Menüpunkt “Install New Software” aus und fügt eine neue externe Site hinzu:

Name: EGit
Location: http://download.eclipse.org/egit/updates

Nun steht Plugin EGit zur Installation bereit. Hier noch eine Benutzeranleitung zu Egit.

Pimp your bash - Informationen zum Repository in der Shell

Um den GIT Informationen zum aktuellen Verzeichnis im Shell Prompt zu integrieren, fügt man folgenden Code Schnipsel oben in der Datei ~/.bashrc ein:

function git_status {
  status=$(git status 2> /dev/null)
  status_dirty=$(echo "$status" | tail -n1)
  num=$(echo "$status" 2> /dev/null | grep "Your branch is ahead of" | awk '{split($0,a," "); print a[9];}' 2> /dev/null) || return
  [[ "$status_dirty" != "nothing to commit (working directory clean)" ]] && echo "*"
  if [[ "$num" != "" ]]; then
    echo " +$num"
  fi

}

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git::\1$(git_status)]/"
}

Nun setzt man die Funktion parse_git_branch in der Prompt-Definition ein. Der Prompt könnte dann so definiert sein:

PS1='\[\033[01;32m\]\h\[\033[01;34m\] \w \033[01;31m\]$(parse_git_branch)\033[01;34m\]\$\[\033[00m\] '

Diese Zeile muss auch in die .bashrc (auf jeden Fall unterhalb der beiden eingefügten Funktionen!)

Was dann so aussehen würde: Beispiel eines Bash Prompts mit GIT Informationen (alle Git bezogenen Informationen sind rot in den eckigen Klammern)

Man bekommt nun folgendes angezeigt:

  • ob das aktuelle Verzeichnis in Git geführt wird
  • den Namen der aktiven Branch
  • ob eine Änderung gemacht wurde und diese noch nicht commitet ist (das Sternchen am Ende)
  • ob Änderungen commitet sind, diese aber noch nicht gepusht wurden (das +-Zeichen am Ende, gefolgt von der Anzahl der vorhanden Commits)

Weitere Ressourcen:

TortoiseGit - Auswahl zu einem GIT Repository

Projektmanagement Services, Consulting und Coaching

Unser Projektmanagement Team aus München ist hervorragend ausgebildet und verfügt über die nötige Expertise, Erfahrung und das Augenmaß, wenn es darum geht in Kundenprojekten die richtigen Tools einzuführen und zu konfigurieren und bestehende Prozesse zu optimieren. Kontaktieren Sie uns unverbindlich.

Aktualisiert: