[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help: config Management]


Hi Christian,

Christian Nitschke wrote:
> Ich wollte mal fragen, wie Ihr eure Config Dateien handhabt.
> was waeren denn so eure Gedanken dazu?

Ich mache das seit einigen Jahren mit git. Und zwar ohne Symlinks.
Das ist eigentlich mega einfach, wenn man es mal gemacht hat.

Lege dir ein Bare Repository an:
$ git init --bare $HOME/.cfg

Damit hast du ein Repository fuer dein Home. Im Verzeichnis $HOME/.cfg liegen
nur die Git-Verwaltungsdaten.

Als naechstes legst du dir ein Alias an:
$ alias config="git --git-dir=$HOME/.cfg/ --work-tree=$HOME"

Nun solltest du "einmal" folgendes ausfuehren:
$ config config --local status.showUntrackedFiles no
(sonst wuerde "config status" immer alle Dateien deines Homes als untracked
auflisten)

Ab jetzt hast du das Kommando "config" welches du ganz genauso wie git
benutzen kannst.

$ config status / commit / pull / push ... merge, rebase, reset... :)

Wenn du irgendwo in deinem Home jetzt eine Datei oder ein Verzeichnis hast,
welches du in deine Dotfiles aufnehmen willst, dann fuege es einfach hinzu:

$ config add .vim
$ config commit -m "Meine Vim Konfiguration"
$ config push

Du kannst natuerlich auch ne Upstream URL setzen und das Repository auf Github
oder Anderso hin puschen.

Wenn du es auf einer anderen Maschine Clonen willst, dann geht das so:

$ git clone --bare https://...../dotfiles.git $HOME/.cfg

-----

Ich habe mir in meiner .kshrc (sollte auch in bash funktionieren) folgende
Funktionen und Aliase angelegt:

# config command
alias config='git --git-dir=$HOME/.cfg/ --work-tree=$HOME'

# I'm lazy, so just commit with some machine info
function dotfiles_autoupdate {
   config add -u && \
   config commit -m "Update $(date +"%Y-%m-%d %H:%M") $(uname -s)/$(uname -m)" && \
   config push
}

# please give me my dotfiles...
function dotfiles_init {
   git --no-replace-objects clone --bare \
       git@xxxxxxxxxxx:dotfiles.git $HOME/.cfg
   config config --local status.showUntrackedFiles no
   config checkout -f
}

-----

Alles gibt's natuerlich in meinen Dotfiles:
https://codevoid.de/?q=/1/git/dotfiles/files.gph

Erfahrungswerte (eigentlich generell zu git):

# Aufassen mit config add <verzeichnis>

Sagen wir du hast .vim deinem Git-Repository hinzugefuegt. Spaeter fuegst du ein
neues Plugin ein - z.B. .vim/bundle/vim-fugitive dann wird das von git nicht
automatisch aufgepickt. Das muss mit "config add" hinzugefuegt werden. Als
Tippfauler Mensch ist man verleitet dann einfach nochmal "config add .vim" zu
tippen. Das fuehrt dann unter Umstaenden dazu, dass viel zu viel hinzugefuegt
wird. (undo files, swapfiles, passwoerter...). Oder im Falle von .mutt z.B. der
komplette header cache ;)

# Keine Passwoerter committen

Klingt logisch, ist manchmal aber gar nicht so einfach. Viele Programme
erlauben es Passwoerter aus Konfigurationsdateien raus zuhalten indem sie
Programme wie "pass" (password-store) oder gpg rufen koennen um sich ein
passwort abzuholen. Wenn das nicht moeglich ist, dann commite ich eine Datei
namens .configfile.sample mit "****" statt Passwort. Das ist aber nur mein
persoenlicher Workaround.

# Mit pull mit --rebase, stash kennen lernen

Man aendert ja doch immer mal wieder was auf nem nicht-aktuellen branch. Daher
empfehle ich eigentlich generell:
$ config pull --rebase # statt config pull

Wenn noch nicht committete Aenderungen "rumhaengen":
$ config stash
$ config pull --rebase
$ config stash apply

*Ich* bin mit meiner Loesung _sehr_ zufrieden.

Viele Gruesse,
Stefan

PS: Schnell getippt - bitte mit Autokorrektur lesen :)

-- 
Stefan Hagen | (gopher|https)://codevoid.de(/gpg)
CBD3 C468 64B4 6517 E8FB B90F B6BC 2EC5 52BE 43BA
-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/