noqqe » blog | sammelsurium | photos | projects | about

In einem Anfall des Ordnungswahns entschloss ich mich im Mai (oder einem deren anderen 11 Monate des letzten Jahres) dazu, mein textbasiertes Wiki, meine Dotfiles und meine Scripte in separaten Git-Repos zu verwalten und zu verteilen. Mit der Zeit merkt man aber, dass das ziemlicher Unsinn war.

Kurz: Ich brauchte eine Lösung, wie ich alle 3 Repositories (ohne History-Verlust) zusammen gemerged bekomme.

    /repos/
    |-- dotfiles.git
    |-- scripts.git
     -- wiki.git

Hierfür hat Zrajm C Akfohg schon eine wunderbare schnelle Lösung gefunden. Zuerst ein neues Repo erstellen:

mkdir ~/repos/noqqe.git
cd ~/repos/noqqe.git
git init

Im Grunde wird jedes Repository in einen separaten Branch gefetched:

git fetch ~/repos/dotfiles master:dotfiles
mkdir dotfiles #Subdir fuer dotfiles

Um die Files im neuen Branch jetzt in einen Unterordner umzumappen hat Zrajm auch einen wunderbaren Weg gefunden:

SUBDIR_NAME=dotfiles
BRANCH_NAME=dotfiles
git filter-branch --index-filter
    'git ls-files -s |
        sed "s-t-&'"$SUBDIR_NAME"'/-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
        mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
    ' "$BRANCH_NAME"

Wenn alles erfolgreich war, kann man den neuen Branch mit dem Master zusammenführen:

git merge dotfiles

und das Spiel wie beschrieben von vorne beginnen.

Comments (2)

Speiderlars on 2011-10-18T17:27:11
Hallo, irgend wie klappt es bei mir so nicht. Kann es sein das ich nach dem mkdir dot... noch etwas machen muss ? Zb denn Branch Master richtig init. Ich komme an denn Punkt das ich die Branches habe zb master:libs dann will ich das Script ausführen und es kommt zb ein: mv: cannot stat `/srv/repos/git/test/.git-rewrite/t/../index.new': No such file or directory Der sub Ordner heißt libs und der Branch auch libs also habe ich in dem script auch: SUBDIR_NAME=libs BRANCH_NAME=libs stehen. Ich hoffe du verstehst mein problem und kannst mir helfen. Gruß Speiderlars

noqqe on 2011-10-22T15:09:19
Mh. Und du bist auch wirklich im richtigen verzeichnis wenn du das Skript ausführst?