Git (Miscellaneous Commands) [German]

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 Updatesvn 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 Commitsvn 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

 

Leave a Reply