Git Branch unter TortoiseGit entfernen

Möchte man einen Git Branch entfernen, so ist dies auf der Konsole mit einer Zeile erledigt:

git branch -D alterBranch

Unter TortoiseGit, einer freien Git Integration für Windows ist dies etwas komplizierter, da das ganze etwas versteckt ist. Um einen Branch zu löschen, öffnet man mittels des Kontextmenüs den Switch/Checkout-Dialog. Dort klickt man auf den Button mit den drei Punkten.

Switch/Checkout

Switch/Checkout

Anschließend öffnet sich ein Dialog welcher eine Übersicht über alle Repository-Branches anzeigt. Dort kann der gewünscht Branch mittels Kontextmenü gelöscht werden.

Remote Tag unter Git löschen

Manchmal möchte man einen Remote-Tag unter Git wieder entfernen bzw. ihn komplett löschen. Dazu dienen folgende Kommandos:

git tag -d tagToBeRemoved
git push origin :refs/tags/tagToBeRemoved

Im ersten Schritt wird der Tag lokal entfernt. Anschließend wird die Änderung in das Remote-Repository übertragen. Damit ist der Tag Geschichte und sollte nicht mehr auftauchen.

Verzeichnis von einem Git Repository in ein anderes verschieben

Unter Git möchte man manchmal ein Verzeichnis von einem Repository zu einem anderen verschieben. Natürlich soll dabei die Revisionsgeschichte nicht verloren gehen. In diesem Fall hilft folgendes Bashskript:

#!/bin/sh
# moves a folder from one git repository to another
# moveFolder <absolute repository one path> <repository one folder> <absolute repository two path>

# prepare repository one
cd $1
git clean -f -d -x
git checkout -b tmpBranch
git filter-branch --subdirectory-filter $2 HEAD
mkdir $2
mv * $2
git add .
git commit -a -m "Move files into folder"

#import in repository two
cd $3
git remote add repositoryOne $1
git pull repositoryOne tmpBranch
git remote rm repositoryOne

#cleanup
cd $1
git checkout master
git branch -D tmpBranch

#remove folder with history from repository one
cd $1
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch $2" HEAD

Genutzt wird das Skript dabei wie folgt:

./moveFolder /absolute/path/to/repo/one folderFromRepoOne /absolute/path/to/repo/two

Nachdem das Verzeichnis in das neue Repository mitsamt der Revisionsgeschichte übertragen wurde, wird es aus dem alten Repository entfernt. Das Skript funktioniert dabei unter Windows, Linux und Mac OS X. Die jeweils aktuellste Version ist auf GitHub zu finden.

Git bei all-inkl einrichten

Nachdem ich versuchte Git per WebDAV in Verbindung mit ownCloud einzurichten, fiel mir ein, das die größeren Paketen (ab Premium) bei all-inkl.com auch einen SSH Zugang beinhalten. Mit diesem ist es relativ einfach das Webhosting Paket als Server für Git Repositories zu benutzen. Sollte auf dem lokalen Rechner noch kein SSH-Schlüssel erzeugt worden sein, so kann dies mittels:

ssh-keygen -t rsa -C ""

nachgeholt werden. Nun kann der Schlüssel an den all-inkl Server übertragen werden:

ssh-copy-id -i ~/.ssh/id_rsa.pub 

Anschließend ist es möglich sich mit dem all-inkl SSH Server ohne Authentifikation über ein Passwort anzumelden:

ssh 

Dort legen wir in dem Ordner in welchem unserer Git Repository landen soll ein leeres Repository an:

git init --bare

Als nächsten Schritt trägt man einen Remote an ein lokales Git Repository an:

git remote add origin ssh:///www/htdocs/nutzername/repos/Example.git

Danach kann das lokale Repository mit dem Befehl:

git push origin master

auf den entfernten Server kopiert werden. Benötigt man es auf einem anderen Rechner so kann das ganze mittels:

git clone ssh:///www/htdocs/nutzername/repos/Example.git

bewerkstelligt werden.

git svn clone von lokalem Repository

Beim Versuch ein lokales SVN Repository mittels:

git svn clone --stdlayout svnrepo gitrepo

in ein Git Repository zu klonen, kam es zu folgender Fehlermeldung:

E: 'trunk' is not a complete URL and a separate URL is not specified

Die Lösung liegt hier an der richtigen Syntax des Pfades, so das es mit

git svn clone --stdlayout file:///home/seeseekey/svnrepo/ gitrepo

funktioniert.