Wer kennt das nicht? Die schönen aliase oder die vimrc mal wieder nicht auf dem Server/PC/Notebook/Raspberry Pi vorhanden. Gerade wenn man öfter mal was auf X Rechnern testet, bekommt man häufig von der Shell gesagt, dass es den Befehl gar nicht gibt… eben weil die ganzen Dotfiles fehlen und der Mensch ein Gewohnheitstier ist (‚ll‘ tippt sich einfach schneller als ‚ls -l‘). Mir ging es immer so, dass ich pro Maschine zusammengeschusterte Dotfiles hatte. Und es fehlt immer etwas. Eben auch, weil das passende zentrale Management fehlt.
GitHub does dotfiles
GitHub hat als Einführung eine eigene Seite für die „Punktfiles“ online. Hier finden sich verschiedene Tools, Bootstraps und Beispiele, wie man seine Dotfiles verwalten kann. Unter anderem seien genannt: homesick, fresh,… Was mich abschreckte ist die Komplexität, die für eine relativ einfache Sache benötigt wird. Ja: die Tools können echt viel, aber ich hole mir viel Code ins Boot.
Mit ein paar Zeilen Code immer up to date bleiben
Zum Glück fand ich einen Blogeintrag von Michael Smalley, der sehr übersichtlich und verständlich erklärt, wie man sein eigenes Skript und GitHub-Repository aufsetzen kann. Aufbauend auf diese Anleitung habe ich mir zwei Shellskripts unter ~/.dotfiles angelegt.
#!/bin/bash ############################ # Init-Script # This script creates symlinks from the home directory to any desired dotfiles in ~/.dotfiles ############################ ########## Variables dir=~/.dotfiles # dotfiles directory olddir=~/.dotfiles_old # old dotfiles backup directory files=`ls -1 $dir/__*` # list of files/folders to symlink in homedir ########## # create dotfiles_old in homedir echo "Creating $olddir for backup of any existing dotfiles in ~" mkdir -p $olddir echo "...done" # change to the dotfiles directory echo "Changing to the $dir directory" cd $dir echo "...done" # move any existing dotfiles in homedir to dotfiles_old directory, then create symlinks for file in $files; do basename=`basename $file` targetname=`echo $basename | sed 's/__//'` echo "Moving any existing dotfiles from ~ to $olddir" mv ~/.$targetname $olddir/ echo "Creating symlink to $file in home directory." ln -s $dir/$basename ~/.$targetname done
Dieses Skript erledigt das Backup von „alten“ Dotfiles auf einer neuen Maschine und verlinkt jeweils die im Verzeichnis liegenden Dateien (jeweils mit Prefix „__“). Ich habe mich für diese Variante entschieden, da man relativ einfach neue Dateien integrieren kann. Mit einem „git init“ und dem Hinzufügen der Dateien per „git add $filename“ baut man sich ziemlich schnell sein „dotfiles“-Repository zusammen. Zu dem init-Skript habe ich mir noch ein Skript angelegt, dass nur die lokale Verlinkung übernimmt.
#!/bin/bash ############################ # # This script creates symlinks from the home directory to any desired dotfiles in ~/.dotfiles ############################ ########## Variables dir=~/.dotfiles # dotfiles directory files=`ls -1 $dir/__*` # list of files/folders to symlink in homedir ########## # change to the dotfiles directory # move any existing dotfiles in homedir to dotfiles_old directory, then create symlinks for file in $files; do basename=`basename $file` targetname=`echo $basename | sed 's/__//'` echo "Creating symlink to $file in home directory." ln -s $dir/$basename ~/.$targetname done
Meine erste Datei war die .vimrc. Also habe ich mir mit vim eine neue Datei unter .dotfiles angelegt, die den Namen __vimrc bekommt. Nachdem ich diese Datei gefüllt hatte, konnte ich mit „init.sh“ die Datei installieren. Es wird im Homeverzeichnis ein Link auf die Datei unter .dotfiles/__vimrc angelegt. Siehe auch:
[email protected] ~ $ ll .dotfiles/__vimrc -rw-r--r-- 1 user user 1,3K Feb 21 17:32 .dotfiles/__vimrc [email protected] ~ $ ll .vimrc lrwxrwxrwx 1 user user 30 Feb 16 00:07 .vimrc -> /home/user/.dotfiles/__vimrc
Der Inhalt der vimrc wird absofort immer über .dotfiles/__vimrc verwaltet und im Git-Repository gesichert. Da ich nicht der Git-Profi bin, habe ich mich hier sehr stark an die oben genannte Anleitung gehalten.
Updaten und aktuell halten
Änderungen werden mit einem einfachen „git commit -a“ in das lokale Repository eingecheckt. Sobald man diese Änderungen zu GitHub übertragen möchte, kann man dies mit „git push origin master“ machen. Voraussetzung hierfür ist, dass man die Schritte von Michael zur Einrichtung durchgeführt hat. Einen neuen Rechner kann man dann per „git clone git://github.com/<usernameongit>/dotfiles.git“ aktivieren. Nachdem man seine Skripte ausführbar gemacht hat, kann man man mit „init.sh“ seine Dotfiles installieren. Sollte sich das GitHub Repository in der Zwischenzeit geändert haben, kann man mit einem „git pull“ die aktuellste Version von GitHub ziehen.
Fazit
Für mich hat diese Vorgehensweise zweierlei Vorteile: ich werde so langsam aber sich mit git etwas warm. Weiterhin kann ich nun auf meinem PC, meinem Notebook und auf meinem Raspberry Pi die gleichen Dotfiles verwenden ohne manuell irgendwas durch die Gegend kopieren zu müssen. Veränderungen werden automatisch versioniert und können gezielt zurück geholt werden. Ich hoffe ich konnte Euer Interesse wecken und Ihr könnt mit meinen Infos etwas anfangen. Mein Dotfiles Repo findet sich unter: https://github.com/demaya/dotfiles und wartet nur darauf, von Euch geforked zu werden 🙂
Links
- gute vimrc: http://amix.dk/vim/vimrc.html
- dotfile-Sammlung: http://dotfiles.org/
- mein GitHub-Repo: https://github.com/demaya/dotfiles
- Noqqe zu Dotfiles: http://noqqe.de/blog/2010/08/16/git-dotfiles-des-home-dirs-verwalten/
Beitragsbild: CC-BY 2.0 by http://www.flickr.com/photos/othree/
3 Kommentare