Erste Schritte mit Git

Marcel Martin

9. Juni 2011

Git

“Git is a free & open source, distributed version control system designed to handle everything from small to very large projects with speed and efficiency.”

http://git-scm.com/

Git

Verteilte Versionsverwaltung

Vorteile verteilter Versionsverwaltung

gegenüber Subversion:

Nachteil Speicherbedarf?

Git-Repos enthalten komplette History, sind aber komprimiert

Beispiel:

Allerdings:

Git-Konzepte

Repository

Index

Working tree

Repository-Struktur

Git verwaltet einen DAG (directed acyclic graph)

(→ Zeichnung)

refs

Zusätzlich zum DAG: veränderbare references auf Knoten (“Post-its”)

Sie realisieren

Der praktische Teil

Inhalt

  1. einmalige Einstellungen
  2. Repository anlegen
  3. Dateien hinzufügen, ändern, löschen
  4. Tags
  5. Branches
  6. Klonen
  7. Anwendungsfälle

Hilfe

Der wichtigste Befehl:

git help

bzw.

git help <Befehlsname>

Erster Schritt: Einstellungen

Einmalig: Name und E-Mail einstellen (tauchen in den Logs auf)

git config --global user.name "Ruth Schell"
git config --global user.email ruth.schell@example.com

weil’s schöner aussieht:

git config --global color.ui auto

schreibt in ~/.gitconfig

Repository erstellen

mein erstes Repository:

mkdir projektx
cd projektx
git init

Unterverzeichnis .git enthält alle Git-Verwaltungsinformationen (einschl. Repository)

Dateien hinzufügen

  1. Dateien erstellen

  2. Datei(en) zur Aufnahme ins Repository markieren (stagen)

    git add readme.txt hello.py
    git status
    # Changes to be committed:
    #   (use "git rm --cached <file>..." to unstage)
    #
    #       new file:   readme.txt
    #       new file:   hello.py
    
  3. Änderungen committen

    git commit -m "Projekt X gestartet"
    

Dateien ändern

Datei(en) ändern, dann Änderungen ansehen:

git diff

Änderungen stagen:

git add readme.txt
git commit ...

Oder direkt alle veränderten Dateien committen:

git commit -am "Begrüßung freundlicher"

History ansehen

git log

oder: das Repository in bunt

gitk

Der Befehl muss evtl. zusätzlich installiert werden

gitk

gitk

Tags erstellen

Zur Erinnerung: Ein Tag ist eine Referenz (ref) auf einen Commit. Damit werden z.B. stabile Versionen markiert.

git tag version0.1

Eine Datei löschen

hinzufügen:

git add Hello.java
git commit -m "Java-Version"

löschen:

git rm Hello.java
git status
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    Hello.java
#
git commit -m "Java-Version gelöscht"

Branches

An Branches verzweigt der Entwicklungsprozess:

Vorgehen:

Branches in Git

(Zeichnung)

Einen Branch anlegen

Branch namens blackjack anlegen und dorthin wechseln:

git branch blackjack
git checkout blackjack

oder in kurz:

git checkout -b blackjack

Arbeiten im Branch

Wo sind wir?

git branch -v

hello.py ändern

dann:

git commit -m "jetzt mit Black Jack" hello.py

Branch wechseln

Zurück zum Hauptast (master):

git checkout master

Hier wird auch gearbeitet:

echo "print 'world'" >> hello.py
git commit -m "world" hello.py

Mergen

alle am Ast “Blackjack” vorgenommenen Änderungen in den aktuellen Branch (master) mergen:

git merge blackjack

Topic-Branch löschen:

git branch -d blackjack

Repositories klonen, Remotes

Um an (fremden) Projekt mitzuarbeiten, komplettes Repository kopieren (klonen):

git clone git://github.com/git/hello-world.git

Ein geklontes Repo “weiß”, woher es kommt:

git remote -v
origin  git://github.com/git/hello-world.git (fetch)
origin  git://github.com/git/hello-world.git (push)

remotes sind entfernte, fremde Repositories

Mit entfernten Repositories arbeiten

Hole alle Commits, die seit letztem Nachsehen hinzugekommen sind:

git fetch
git merge

oder zusammen:

git pull

Lade alle neuen lokalen Commits ins entfernte Repo hoch:

git push origin master

Anwendungsfälle

  1. Privates Projekt
  2. Subversion-Projekt
  3. Git-Projekt

Anwendungsfall: Privates Projekt

Privates Projekt I

zentrales Repository anlegen:

ssh user@server
cd repositories
git init --bare myproject.git

lokale Klone erzeugen (auf Desktop-PC und Notebook):

git clone user@server:repositories/myproject.git
cd myproject

Jetzt mit dem Repo arbeiten: git add, git commit …

Privates Projekt II

Nach der Arbeit:

git push origin master

Und ab jetzt immer vor der Arbeit:

git pull

Automatisches Pushen nach jedem Commit:

echo "git push" > .git/hooks/post-commit
chmod +x .git/hooks/post-commit

Anwendungsfall: Subversion-Projekt

Git lokal, SVN remote

Hole alle Commits aus SVN-Repo und übertrage sie in neues Git-Repo:

git svn clone

hack, hack (git add, git commit, etc)

fremde Änderungen holen:

git svn rebase

lokalen Änderungen hochladen:

git svn dcommit

Anwendungsfall: Git-Projekt

Sonstiges

Further reading

Hosting