Menu

Dotfiles i bare repository, czyli łatwa migracja ustawień

29 października 2020 - Linux

Dotfiles i bare repository – co to jest i po co

W tym poście chciałbym opisać jak bare rapository może pomóc w zarządaniu i migracji dotfiles. Wypadałoby zacząć od tego czym jest owy dotfile. A więc są to ukryte pliki w których bardzo często przechowywana jest konfiguracja programy, działania powłoki itd. Często edytuje się te pliki aby osiągnąć porządzane działanie, wygląd lub inne funkcje w aplikacji.

W związku z tym im więcej mamy takich zmodyfikowanych konfiguracji tym trudniej jest to utrzymać, a w razie awarii bądź zmiany sprzetu przywrócenie statnu poprzedniego może zająć naprawdę sporo czasu. Jako, że ostanio zawodowo zrobiłem migrację z windowsa do linuksa, problem ten stał się dla mnie ponownie uciążliwy. Mocno zmotywowany postanowiłem poszukać rozwiązania.

Rycerzem na białym koniu okazał się być git, czyli znany prawie każdemu programiście system kontroli wersji. Oczywiście nie tylko porgramiści mogą i powinni używać Gita na codzień. Ciekawym zastosowaniem może być np wersjonowanie prezentacji lub trzymanie różych jej konfiguracji na różnych gałęziach itd. W przypadku plików konfiguracyjnych idealną opcją będzie użycie repozytorim git z flagą bare.

Inicjalizowanie nowego bare repozytorium

git init --bare $HOME/.dotfiles
alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
config config --local status.showUntrackedFiles no
echo "alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'" >> $HOME/.bashrc

A więc jak się tym teraz posługiwać? Przeróbmy scenariusz gdy chcemy dodać do naszego repozytorium dwa nowe pliki konfiguracyjne. Będzie to .bashrc i .vimrc

config status
config add .bashrc
config commit -m "Added bashrc file"
config add .vimrc
config commit -m "Add vimrc file"
config push

Korzystamy z naszego repozytorium dokładnie tak samo jak z normalnego gita, z tą różnicą że posługujemy się wcześniej zdefiniowanym aliasem.

Przywracanie repozytorium

Jeżeli posiadamy już swoj repozytorium z plikami konfiguracyjnymi, zobaczymy jak możemy je przywrócić np. po zmianie komputera.

alias config='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
echo ".dotfiles" >> .gitignore
git clone --bare <git-repo-url> $HOME/.cfg
config checkout
config checkout
error: The following untracked working tree files would be overwritten by checkout:
.zshrc
Please move or remove them before you switch branches.
Aborting
mkdir -p .config-backup && \
config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
xargs -I{} mv {} .config-backup/{}
config checkout
config config --local status.showUntrackedFiles no

I to by było na tyle. W tej chwili możemy zaczać normalną pracę z repozytorium.

Żeby ułatwić sobie życie i przyspieszyć cały proces można to sobie ubrać w ładny skrypt i w zasadzie jednym polecenim załatwić temat importu ustawień. W moim przypadku stowrzyłem sobie GitHub Gist o zawartości

git clone --bare git@github.com:mati-ck/dotfiles.git $HOME/.dotfiles
function config {
   /usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME $@
}
echo ".dotfiles" >> .gitignore
mkdir -p .config-backup
config checkout
if [ $? = 0 ]; then
  echo "Checked out config.";
  else
    echo "Backing up pre-existing dot files.";
    config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .config-backup/{}
fi;
config checkout
config config status.showUntrackedFiles no

Wywołuję go jednym poleceniem

curl -Lks https://bit.ly/2HLeuTY | /bin/bash 

Linkografia:

https://www.atlassian.com/git/tutorials/dotfiles

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *