GIT Installation (MacOSX)
Zuerst Homebrew installieren:
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
brew update brew install git
dann befindet sich GIT unter /usr/local/
Falls vorhanden GIT aus /usr/bin löschen
GIT Konfiguration
Konfiguration für farbige git Ausgaben
git config --global color.ui auto
Konfiguration für verbesserte Logausgabe “git lg”
git config --global alias.lg "log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr %an)%Creset' --abbrev-commit --date=relative"
Git-Completion erlaubt das Ergänzen von GIT Eingaben im Terminal mit der Tabulator-Taste. Git-Completion, in die .profile des User eintragen
source /usr/local/etc/bash_completion.d/git-completion.bash
Git Prompt:
PS1="\[\033[31;38m\]\w\[\033[1;31m\]\$(__git_ps1)\[\033[00m\] " export GIT_PS1_SHOWDIRTYSTATE=1
Git Befehle
Manpages
Hilfe für die Navigation durch Revisionen
git help revs.parse
Allgemein
git help command_name
GIT Hilfe/Manpage zu bestimmten Befehlen
git status
zeigt Unterschiede von Working-Copy zu Repository
git config -l
zeigt alle für das Projekt relevanten Konfigurationen
git show
zeigt letzten Commit
Git Log
git log
zeigt Commit-Logs
git log --stat
zeigt Statistiken
git log -p
zeigt alle Patches
git log tag_name..tag_name git log commit_id..commit_id
zeigt alle Änderungen zwischen zwei Tags oder Commits.
git log file_name
zeigt alle Änderung von einer Datei an
git blame file_name
zeigt Änderungen an einer Datei zeilenweise mit Bearbeiter und Zeitstempel an.
Suche in der Historie
git grep foo git log -S'foo'
Git grep gibt dabei auch gleich die Zeile mit aus, wobei die Suche mittels git log den Commit ausgibt.
Branching
git branch branch_name [commit_id]
legt neuen Branch an
git checkout branch_name
wechselt zum Branch
git checkout -b branch_name [commit_id]
erzeugt und wechselt zum Branch
git push origin :branch_name
Löscht einen remote Branch
git clean -n git clean -f
mit Clean lassen sich nicht im Index befindliche Dateien bereinigen. -n zeigt die Dateien an die gelöscht würden. -f führt das Löschen aus.
git reset --hard commit_id
Setzt den HEAD auf eine andere Revision
git checkout commit_id file_name
Holt alte Datei zurück
Mergen
git checkout master git megre branch_name
Branch zum Master mergen
git reset --merge
Merge-Vorgang abbrechen!
git mergetool
Um einen Konflikt mit Mergetool zu beheben
git cherry-pick commit_id
Holt ein bestimmtes Feature aus einem Commit und fügt den dem aktuellen Branch ein.
Dateien Ignorieren
Erst müssen die Dateien die Ignoriert werden sollen aus dem Repository raus! Mit dem folgenden Befehl werden Dateien sowohl dem Working-Tree und dem Index gelöscht.
git rm
Manpage für .gitignore
git help gitignore
Die Datei .gitignore kann auch in Unterverzeichnissen liegen. Sie wirkt sich rekursiv auf die Verzeichnisstruktur aus.
Beispiele für Einträge in der .gitignore Datei.
*.log *~ *.class
Remote Repositories
git remote add remote_name remote_url
Fügt ein remote Repository hinzu.
git remote -v
Zeigt alle remote Repositories
git push remote_name branch_name
Lädt den Branch branch_name zu dem remote Repository mit dem remote_name.
git fetch
Holt alle remote Branches. Die geholten Branches sind “Tracking-Branches” und read only!
git branch -a
Zeigt auch remote Branches die mit git fetch geholt wurden.
git checkout remote_branch_name
Erzeugt einen neuen Branch basierend auf einem remote Branch und wechselt zu diesem.
git pull
ist die Kurzform für
git fetch git merge
Rebase / Historie neu schreiben
git rebase -i commit_id
Interaktives Neuschreiben der Historie
git rebase -i master
Wenn auf einem Festure-Branch, kann mit Rebase der lokale Feature-Branch so auf den Stand des inzwischen fortgeschrittenen Master-Branches gebracht werden. D.h. es sieht so aus als hätte man gleich auf dem neusten Stand von Master gebranched.
git pull --rebase
Wenn auf dem Master-Branch gearbeitet wird, werden die lokalen Änderungen auf dem neusten Stand des Remote-Masters aufgesetzt.
Patch: Austausch mit Dateien
git format-patch master
Aus dem Feature-Branch einen Patch zu Master anlegen. Es entstehen 000x.xxx.patch Dateien.
git am patch_name
Mit git am wird ein Patch angewandt. AM steht für Apply-Mail. (Kann auch mit 000* angewendet werden)
Git Stash / Änderungen zur Seite schieben
git stash
Legt die aktuellen Änderungen zur Seite und man befindet sich dann auf dem letzten Commit.
git stash list
Listet alle Stashes
git stash pop
Holt einen Stash zurück
Binäre Bugsuche mit Git – bisect
Mit der GIT-Bugsuche, kann man einen Commit finden, der einen Bug einführt. GIT verwendet dazu eine Binärsuche.
git bisect start git bisect bad commit_id git bisect good commit_id
startet die Binärsuche nach dem Bug. Mit bad gibt man die Version an von der man weiss, dass sie den Bug enthält und mit good gibt man die Version an die den Bug noch nicht enthält.
git bisect reset
verlässt die Bugsuche
GIT in GIT – Submodule
git submodule add url_to_repo path
fügt ein anderes Repository zum eigenen Repository hinzu.

