Git Workflow on Gnome

Git in der Version 1.8 bringt Unterstützung für den Gnome Keyring mit. Dieser hilft bei allen https-Repositories. Da es ähnliches auch für Windows gibt (Link: Windows Credential Store for Git) clone ich fast alle Repositories mittlerweile über die https-Url. Das erspart einiges an Key-Management.

Unter Linux muss der credential helper allerdings erst distributions-abhängig compiliert werden. Hier die notwendigen Schritte unter ArchLinux:

$ cd /usr/share/git/credential/gnome-keyring
$ sudo make
$ git config --global credential.helper /usr/share/git/credential/gnome-keyring/git-credential-gnome-keyring

Fundstelle mit weiteren Anleitungen für andere Distributionen: http://stackoverflow.com/a/13390889

Git Workflow for Web Development

Ziel: automatischer Sync zwischen Entwicklungs-Repository, GitHub-Mirror und Web-Server.

  1. Bare-Repository auf einem Server

    $ mkdir mywebsite.git
    $ cd mywebsite.git
    $ git init --bare
    
  2. SSH-Key Setup auf dem Server

    ssh-keygen -f ~/.ssh/some_repo
    

    Passwort leer lassen. Dann an die ~/.ssh/config folgendes anhängen:

    Host some-repo-github.com
      IdentityFile /path/to/user-home/.ssh/some-repo
      HostName github.com
      User git
    
  3. Repository-only DeployKey auf GitHub einrichten

    In den Einstellungen/Settings des Mirror-Repositories den oben erzeugten Key als DeployKey konfigurieren.

  4. GitHub-Mirror als Remote registrieren

    git remote add --mirror github some-repo-github.com:github-user/some_repo.git
    

    GitHub-User und Repo-Adresse muss natürlich angepasst werden.

  5. Initialer Fetch

    Falls das GitHub-Repo schon existierte, einen initialen Fetch ausführen:

    git fetch github
    
  6. GitHub Push-Hook

    Datei anlegen (ausführbar!) hooks/post-receive mit folgendem Inhalt (plus She-Bang):

    git push --quiet github &
    
  7. WebSite Update-Hook

    In der gleichen Datei (falls gewünscht):

    GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f
    

Als zentrales Repo dient nun das im ersten Schritt angelegte (Bare) Repository. Pushs auf dieses
Repo updaten den GitHub-Mirror und die WebSite selbst.

Verweise:

Mirror your Repository on GitHub

Deploy WebSite changes via git