Allgemeine Konfiguration
Generischer Befehl:
git config
Git speichert Einstellungen auf drei Ebenen:
- –file (default): für das aktuelle Repository
- –global: für den aktuellen Benutzer
- –system: für das gesamte System
Die wichtigsten Funktionalitäten sind:
- Einstellung abfragen:
git config --global
- Einstellung setzen (–replace-all, da sonst ein weiterer und kein neuer Wert für gespeichert wird):
git config --global --replace-all
- Einstellungen abfragen:
git config --global --list
Nützliche Optionen sind dabei (Git macht auch Vorschläge, wenn man TAB betätigt):
- user.name: Benutzername für Commit-Nachrichten
- user.e-mail: Mailadresse für Commit-Nachrichten
- core.editor: Editor für Nachrichten oder längere Texte (bspw. nano oder [Vim])
- alias: Setzt mal beispielsweise alias.co auf checkout, dann kann man einen Checkout von nun an auch neben dem ursprünglichen langen git checkout mit dem Kurzbefehl git co durchführen.
Repository initialisieren
- Repository im aktuellen Verzeichnis neu erstellen:
git init
- Ein existierendes Repository ins aktuelle Verzeichnis klonen (–shared: auch andere Benutzer des Systems können darauf zugreifen):
git clone --shared .
- Diese Seite wird von nun an den Namen origin tragen.
Hinzufügen, Entfernen und Anzeigen von Dateien
- Datei file.txt zum Repository hinzufügen
git add file.txt
- Dies funktioniert auch für Verzeichnisse.
- Git fügt keine leeren Verzeichnisse hinzu!
- Der Befehl git add file.txt hat noch zwei weitere Funktionen:
- # Stage: Falls die Datei file.txt in den nächsten Commit aufgenommen werden soll.
- # Resolved: Falls die Datei file.txt einen Konflikt hatte und jetzt als gelöst (resolved) markiert werden soll.
- Datei file.txt aus dem Repository löschen:
- Datei file.txt auch vom Dateisystem löschen:
git rm file.txt
- Datei file.txt nicht vom Dateisystem löschen:
git rm --cached file.txt
- Alle aktuelle versionierten Dateien anzeigen:
git ls-files
- Aktuellen Status anzeigen (Was wird committed? Was wurde verändert?):
git status
- Mit der Option -v bekommt man die Differenz zum Original angezeigt.
Änderungen rückgängig machen
Das Äquivalent eines Reverts (svn revert file.txt) bei Subversion lautet:
git reset HEAD test.txt # only necessary if file has been deleted git checkout -- test.txt
Entferntes Repository
- Änderungen holen (Äquivalent eines Update – svn update– bei Subversion):
- Falls man nur eine entfernte Seite hat, dann ist der Aufruf einfach:
git pull
- Ansonsten muss man die entfernte Seite mit Namen (origin) (und ggfs. sogar Branch – master – nennen):
git pull origin master
- Änderungen schreiben (Äquivalent eines Commit – svn commit– bei Subversion)
- Falls man nur eine entfernte Seite hat, dann ist der Aufruf einfach:
git push
- Ansonsten muss man die entfernte Seite mit Namen (origin) (und ggfs. sogar Branch – master – nennen):
git push origin master
Informationen über entfernte Repositories
- Ausführliche Informationen über remote comp5lx mittels git remote show :
- Option -n verhindert, dass der Remote angesprochen wird, ansonsten funktioniert die Anfrage nur, wenn man gerade online ist.
$ git remote show comp5lx -n * remote comp5lx Fetch URL: ssh://comp5lx/var/git/repo.git Push URL: ssh://comp5lx/var/git/repo.git HEAD branch: (not queried) Remote branch: (status not queried) master Local ref configured for 'git push' (status not queried): (matching) pushes to (matching)
Nachträglich entfernte Repositories tracken
Es kann unter Umständen passieren, dass der aktuelle lokale Branch einen entfernten Branch origin/b_remote nicht trackt und man dies nachholen möchte. In diesem Fall kann man mit der Option -u beim Pushen den Upstream Branch aktualisieren:
git push -u origin b_remote
Siehe auch: hier
Gespeicherte Zwischenstände (Tags)
Git bietet anders als Subversion eine integrierte Verwaltung von Tags:
- Alle Tags auflisten:
git tag
- Tag erstellen (-f erzwingt Überschreiben):
git tag -a "Version_1.0"
- Tag löschen:
git tag -d "Version_1.0"
Zweige (Branches)
- Alle Branches auflisten:
git branch
- Branch neuer_branch erstellen
git checkout -b "neuer_branch"
- Branch löschen:
git checkout master # Branch verlassen git branch -d "neuer_branch"
- Änderungen aus dem Branch neuer_branch in den Branch master übernehmen:
git checkout master # Branch wechseln git merge "neuer_branch" # Änderungen integrieren
GitHub mit einem anderen Identity File verwenden
Normalerweise nimmt der SSH-Befehl an, dass der öffentliche Schlüssel unter ~/.ssh/id_rsa.pub zu finden ist.
Möchte man nun einen anderen Schlüssel verwenden, dann sind die folgenden Schritte nötig:
- Füge eine Hostdefinition in die Datei ~/.ssh/config ein:
Host github Port 22 Hostname github.com User git IdentityFile ~/.ssh/github_key
- Hinzufügen/Klonen der remote site:
git remote add origin ssh://github/RomeoKilo/repository
Diverses
- Passwort temporär speichern (default: 900 Sekunden):
git config credential.helper cache git config credential.helper 'cache --timeout=300'
- Fast Forward deaktivieren für Merges in den Master:
git config --global branch.master.mergeoptions "--no-ff"
- Lokale Kopien von entfernten Branches löschen, falls diese nicht mehr existieren:
git fetch -p origin
- Übersicht über den Zustand des Repositories:
gitk --all
- Grafisch mit Git arbeiten:
git gui
- Branches löschen, dir zwar als remote/… gekennzeichnet sind, aber in Wirklichkeit nicht mehr auf dem jeweiligen Remote-Server existieren:
git remote prune origin
- Hübsche Bash-Prompt:
export PS1='\[\033[01;32m\]\u\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " (%s)")\[\033[01;34m\]$\[\033[00m\] '
git.config (Beispiel)
Nutzerspezifische Einstellungen werden in der Datei ‘~/.gitconfig’ gespeichert:
[user] name = Rüdiger Kluge email = ruediger.kluge@conelek.com [core] # autocrlf = true [alias] l = log --graph --pretty=oneline --abbrev-commit --decorate lt = log --topo-order --graph --pretty=oneline --abbrev-commit --decorate [color] # turn on color diff = auto status = auto branch = auto interactive = auto ui = auto [color "branch"] # good looking colors i copy/pasted from somewhere current = green bold local = green remote = red bold [color "diff"] # good looking colors i copy/pasted from somewhere meta = yellow bold frag = magenta bold old = red bold new = green bold [color "status"] # good looking colors i copy/pasted from somewhere added = green bold changed = yellow bold untracked = red [push] # 'git push' should only do the current branch, not all default = current [branch] # always setup 'git pull' to rebase instead of merge autosetuprebase = always [alias] st = status ci = commit br = branch co = checkout df = diff [branch "master"] mergeoptions = --no-ff
Links
- Visual Git Guide: Sehr schön illustrierte Anleitung zu Git