Git

aus www.kruedewagen.de, Homepage von Ralf und Judith Krüdewagen (Kruedewagen)
Zur Navigation springen Zur Suche springen

Git ist ein verteiltes Revision Control System für Software und Dateien aller Art (Versionsverwaltung).

Allgemeines

Bücher und Training

Videos

Communities

Tipps und Tricks

Git mit großen Dateien

Git wurde nicht für das Speichern sehr großer Dateien konzipiert. So werden alle Dateien vor dem Speichern auf Festplatte erst in das RAM geladen, um z.B. SHA-1 Checksummen zu bilden. Daher muss so viel RAM installiert sein, dass jede Datei einzeln hinein passt. Auch ist der I/O-Durchsatz entscheidend für die Performance.

Falls Git große Dateien verwalten soll, bietet sich die Verwendung von git-submodule an.

Alternativen:

Siehe auch:

Git hinter einem HTTP-Proxy

Entweder über Shell-Variable

export http_proxy=http://localhost:3128

oder in Git Config eingebaut

git config --global http.proxy http://localhost:3128

Siehe auch Git Tutorial.

Achtung: Git Repositories müssen dann auch per HTTP/HTTPS angesprochen werden (nicht per git Protokoll).

GUI

Git und Eclipse

Server

  • Gerrit - Git Code Review und Repository Server: steuert Access Control, Projekte
  • Jenkins - continuous integration server

Auch als Dienstleister:

  • Github - Free public repositories, collaborator management, issue tracking, wikis, downloads, code review, graphs and much more
  • Gitorious - Host your open source projects and their repositories for free on Gitorious to enable community contributions.
    • Plattform ist OSS
  • Bitbucket - Store all of your Git and Mercurial source code in one place with unlimited private repositories. Includes issue tracking, wiki, and pull requests. Secure hosting with flexible permissions for your repositories. Integrates with JIRA, Jenkins, Pivotal, Cloud9 IDE and other developer tools.

Begriffe

  • Index = Staging Area

Kommandos

Lokales Repository

  • Projekt initialisieren (Vereichnis darf schon Files enthalten)
cd /etc
git init apache2

oder gleichwertig

cd /etc/apache2
git init

Hinweise:

  • erzeugt /etc/apache2/.git
  • apache2 ist das Reposhttp://stackoverflow.com/questions/2199897/how-to-convert-a-git-repository-from-normal-to-bareitory
  • Alle Files zum Index hinzufügen
cd apache2
git add *
  • Veränderung an einer einzelnen Datei zum Index hinzufügen
git add 
  • Veränderungen aller Dateien in Index übertragen, jedoch noch kein Commit
git add -u
  • Commit (direkt mit Kommentar, Kommentar wird abgefragt, verbose)
git commit -m "First commit"
git commit
git commit -v
Hinweis: git commit zeigt Änderungen an, die noch nicht im Index sind (staged), und listet noch nicht hinzugefügte Dateien
  • Commit mit Umgehung des Index (sofort vom Working Tree ins Repository)
git commit -a -m "Comment"
  • Letzten Commit widerrufen und mit neuem Kommentar bzw. neuen Dateien erneuern
git commit --amend
  • Einen Branch erzeugen
git branch next
  • Alle lokalen Branches anzeigen
git branch
  • Alle Branches anzeigen - auch die Remote-Tracking-Branches
git branch -a
  • Einen Branch auschecken (auf den dann die Änderungen im Working Tree wirken)
git checkout master
git checkout next
  • Einen Branch next mit Änderungen nach master mergen
git checkout next
-> Datei editieren
git add <datei>
git commit
git checkout master
git merge next
git push (Änderungen Richtung Remote)
  • Projektgeschichte ansehen (letzte 4 Commits, zeitliche Einschränkung)
git log -4 --color-words
git log --after='2011-31-12'
git log --before='2011-31-12'
git log --since='yesterday'
git log --format=fuller
  • Unterscheide anzeigen (zum letzten Commit)
git show --color-words
git log -p --color-words
  • Unterschiede anzeigen zw. Working Tree und Index (vor Commit)
git diff --color-words
  • Unterschiede anzeigen zw. Index und Repository
git diff --staged --color-words
  • Muster in allen Dateien durchsuchen
git grep muster
  • Muster in bestimmten Dateien durchsuchen (hier .conf)
git grep muster -- '*.conf'
  • Konfiguration von $HOME/.gitconfig
git config --global user.name 'Max Mustermann'
git config --global user.email Max.Mustermann@example.com
git config --global color.ui auto
git config --global -l
git config --global -e
man git-config
Hinweis: ohne --global wird lokale Repository-Konfig editiert, mit --system die systemweite Konfig

Remote Repository

  • Clone erzeugen mit Referenz auf Origin
git clone ssh://user@gitserver:29418/repo.git
  • Einen (lokalen) Branch auschecken (auf den dann die Änderungen im Working Tree wirken)
git checkout master

oder für Branch next

git checkout next
  • Einen Remote-Branch auschecken (der lokal noch nicht existiert) und dabei einen neuen lokal erzeugen [1]
 git checkout -b local-name origin/remote-name
  • Änderungen vom Remote herunterladen
git pull
  • Änderungen nach Commit zum Remote hochladen (Origin darf nicht bare sein, s.u.)
git push
  • Neue lokale Branches nach Remote pushen
Einen (neuen) Branch einmalig nach Remote pushen (wird dort automatisch erzeugt)
git push origin next
git push --all
Oder besser den neuen Branch dabei sofort in die Upstream-Konfig übernehmen, damit nachfolgend git push ausreicht:
git push -u origin next
Oder (nachträglich) den Upstream umkonfigurieren, Remote Branch origin/alpha muss jedoch schon existieren - ggf. mit Gerrit anlegen und pullen [2]
git branch -u origin/alpha alpha
  • Konfig .git/config
[remote "origin"]
        url = ssh://user@gitserver:29418/repo
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "next"]
        remote = origin
        merge = refs/heads/next

Remote Repository auf gleichem Host

  • Clone erzeugen mit Referenz auf Origin
cd /tmp
git clone /etc/apache2

erzeugt /tmp/apache2

  • Für einen Push von Änderungen nach Origin muss das Origin bare sein (ohne .git, ohne working directory). Siehe auch [3]. Daher sollte in so einem Fall das Origin so erzeugt werden:
cd /etc/apache2
git init --bare
Server wie Gerrit erzeugen Repositories standardmäßig als "bare" ohne working directory.
Siehe [4] wie man von non-bare nach bare konvertiert, z.B. mittels
git clone --bare /etc/apache2

erzeugt Verzeichnis

apache2.git