Die meisten Linuxnutzer haben eine Vielzahl von Konfigurationsdateien für Programme wie vim, bash, ssh oder ähnliches. Wenn man mehrere Arbeitsplätze hat, dann kommt schnell der Wunsch auf diese Konfigurationsdateien synchron zu halten. Da dieses in Handarbeit auf Dauer recht umständlich ist, haben sich Programme wie vcsh etabliert, die Konfigurationsdateien in Versionskontrollsystemen verwalten.
vcsh setzt an dieser Stelle ganz auf das etabliert git Versionskontrollsystem. Was für den Linux Kernel gut ist, dass kann für Konfigurationsdateien nicht schlecht sein.
vcsh findet sich unter https://github.com/RichiH/vcsh . Die Benutzer Debian-basierter Distributionen können vcsh für gewöhnlich via apt-get installieren. Nach der Installation muss man sich überlegen ob man alle Konfigurationsdateien in einem Repository verwalten möchte, oder beispielsweise pro Applikation in jeweils einem Repository. In unserem Beispiel entscheiden wir uns dafür, mehrere Repositorys zu verwenden. Das hat den Vorteil, dass wir uns bei jedem System entscheiden können welche Konfigurationsdateien wir installieren möchten.
Für den Anfang begnügen wir uns mit der ZSH Konfiguration.
Am Anfang steht immer die Initialisierung des Repositorys:
# vcsh init zsh vcsh: info: attempting to create '/home/formorer/.config/vcsh/repo.d' vcsh: info: attempting to create '/home/formorer/.gitignore.d' Initialized empty Git repository in /home/formorer/.config/vcsh/repo.d/zsh.git/
Anschliessend können wir Dateien oder Verzeichnisse hinzufügen:
# vcsh zsh add .zshrc.local .zsh.d
Diesen Prozess können wir nun beliebig wiederholen. Nachdem wir mit dem hinzufügen von Dateien oder Verzeichnissen fertig sind, müssen wir unsere Änderungen noch abschliessen (committen).
# vcsh zsh commit -m 'Initial commit' [master (root-commit) 540c022] Initial commit 1 file changed, 67 insertions(+) create mode 100644 .zshrc.local
Wenn wir nun etwas ändern, dann können wir das mittels vcsh nachvollziehen:
# echo "# Dies ist ein Kommentar" >> .zshrc.local vcsh zsh diff diff --git a/.zshrc.local b/.zshrc.local index 450644e..47885a2 100644 --- a/.zshrc.local +++ b/.zshrc.local @@ -65,3 +65,4 @@ export CVS_RSH=ssh dquilt() { quilt --quiltrc=${HOME}/.quiltrc-dpkg "$@"; } compdef dquilt=quilt #zstyle :prompt:grml(|-large|-chroot):*:items:user pre %F{red} +# Dies ist ein Kommentar
Wenn wir damit zufrieden sind können wir einfach alle Änderungen im zsh Repository schreiben:
# vcsh zsh commit -a -m 'test' [master 498cc62] test 1 file changed, 1 insertion(+)
Solange die Konfigurationsdateien nur lokal verwaltet werden ist der eigentliche Nutzen von vcsh recht begrenzt. Daher wurde ein Repository auf github erstellt. Dieses können wir vcsh nun als entfernte Quelle übergeben:
# vcsh zsh remote add origin git@github.com:formorer/vcsh-zsh.git anschliessend laden wir unser Repository in das neu erstellte Repo # vcsh zsh push -u origin master Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (6/6), 1.59 KiB | 0 bytes/s, done. Total 6 (delta 1), reused 0 (delta 0) To git@github.com:formorer/vcsh-zsh.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
Nach diesem initialen Push reicht das Kommando vcsh zsh push um Änderungen Richtung github zu übertragen.
Wenn wir jetzt einen neuen Rechner in Betrieb nehmen, dann können wir sehr einfach das Repository clonen:
# vcsh clone git@github.com:formorer/vcsh-zsh.git zsh vcsh: info: attempting to create '/home/test/.config/vcsh/repo.d' Initialized empty Git repository in /home/test/.config/vcsh/repo.d/zsh.git/ remote: Counting objects: 6, done. remote: Compressing objects: 100% (3/3), done. Unpacking objects: 100% (6/6), done. remote: Total 6 (delta 1), reused 6 (delta 1) From github.com:formorer/vcsh-zsh * [new branch] master -> origin/master
Nach diesem Kommando stehen unsere Konfigurationsdateien wieder zur Verfügung. vcsh zsh pull aktualisiert das Repository später auf den aktuellen Stand.
Wenn man mehrere Repositorys verwendet, dann kann man den Namen des Repositorys auch weglassen. In diesem Fall werden alle Repositorys aktualisiert:
# vcsh pull zsh: Already up-to-date.
Weitere Informationen zu vcsh findet man auf der Projektwebseite: https://github.com/RichiH/vcsh